패키지는 CRAN(http://cran.r-project.org)의 Packages에서 확인해 볼 수 있다.
패키지 설치하기
dplyr 패키지를 설치한다고 가정아래 패키지를 설치하고 패키지를 불러오자.
install.packages('dplyr') # 패키지 설치, Rstudio에 한번 설치하면 다음에 다시 사용하기 위해 또 설치할 필요는 없다. library(dplyr) # 설치된 패키지를 불러올 때 사용한다. |
설치된 패키지 확인 및 삭제하기
Rstudio에 설치된 모든 패키지를 확인하고 싶으면 library() 처럼 입력하면 된다.
삭제하고자 할 때는 remove.packages("패키지명") 처럼 입력하면 된다.
설치된 패키지에 어떤 함수들이 있는 지 확인하기
help(package = "패키지 이름")
예를 들어 help(package = "dplyr") 처럼사용한다.
설치된 패키지의 내장 데이터를 확인하기
패키지를 익히기 위해 별도의 데이터를 구할 필요는 없을 듯 하다. 아래에 내장 데이터가 무엇이 있는 지 확인하고 쓰면 되기 때문이다.
data_list = data(package=.packages(all.available = TRUE)) data_list # 설치된 패키지의 모든 내장 데이터의 목록이 나타남 data_list$results[data_list$results[,"Package"] == "dplyr", ] # dplyr의 내장 데이터(Item) 확인 ![]() View(starwars) # 확인해 보자 View(storms) # 확인해 보자 |
Rstudio 창에서도 확인이 가능하다.
위에서 설치한 데이터를 핸들링하는 dplyr 패키지에 대해서 알아보자. dplyr패키지는 tidyverse의 하위 패키지 중 하나이다. tidyverse 하위에는 많은 패키지들이 포함되어 있는데 굳이 다 사용하지 않을거면 tidyverse를 설치할 필요는 없을 듯 하고 필요한 것만 설치하는 것이 좋을 듯 하다.
dplyr패키지에는 데이터프레임을 조작할 수 있는 함수가 있으며 group_by()와 summarize()함수를 이용하여 요약할 수 있고 논리 필터링 연산을 사용하여 데이터 일부를 분석할 수 있다.
dplyr # 패키지명을 입력한 후 커서가 그 위치에 있는 상태에서 F1을 눌러보자. |
오른쪽 https://dplyr.tidyverse.org에서 확인해보면 사용법을 익힐 수 있다.
특히 사이트에서 제공하고 있는 치트 시트(Cheat Sheet)를 확인해 보면 거의 완벽하게 이해할 수 있게 될 것이다.
dplyr의 함수
● select() : 데이터프레임에서 열(column)을 추출한다.
● filter() : 지정한 조건에 따라 행(row)을 추출한다.
주의할점은 연산순서에 따라 결과가 달라진다.
● mutate() : 기존 칼럼값을 활용하여 새로운 칼럼을 생성할때, 파생변수를 만들거나 기존 변수를 변환할 때 사용한다.
● arrange() : 작은 값으로부터 큰 값의 순으로 데이터를 정렬 할 때 사용한다. -> 열지정
● summarize() : 요약함수로서 mean(), sd(), var(), median() 등의 함수를 지정하여 기초 통계량을 보여준다.
● group_by() : 데이터에서 특정 컬럼을 지정해서 그룹 별로 묶을 수 있다. select()와 다른점은 그룹여부이다.
아래 실습에서 사용하고 있는 startwars 데이터프레임은 dplyr패키지에 내장되어 있는 데이터셋이다.
실습 select()
데이터프레임에서 열을 추출한다. 열은 name, height, mass, hair_color, skin_color, eye_color, birth_year 등으로 구성되어 있다. 이름, 키, 문자열의 끝 부분이 특정한 문자열 패턴으로 끝나는지 즉, "color"로 끝난 열을 추출해보자.
starwars # 데이터프레임의 내용을 확인해 보자. View(starwars)도 좋겠다. 앞에서 library(dplyr)을 하지 않았다면 해야 한다. starwars %>% select(name, height, ends_with("color")) # name:mass와 같이 콜론을 사용할 수도 있다. ![]() |
%>% 는 파이프라인 연산자(pipe operator)라 하며 함수를 연속적으로 적용하는 작업을 간결하게 표현할 수 있도록 도와준다. 왼쪽에 있는 결과를 오른쪽의 함수로 전달하는 역할을 한다. 만약 파이프라인 연산자를 사용하지 않을 경우에는 다음과 같이 사용할 수 있다.
select(starwars, name, height, ends_with("color")) # 또는 select(starwars, name, height, hair_color, skin_color, eye_color) |
직접 변수 이름을 지정하는 방식은 파이프라인 연산자를 사용하는 것보다 코드가 길어지고 가독성이 떨어질 수 있으므로, 가능하다면 파이프라인 연산자를 사용하는 것이 좋다.
실습 filter()
데이터프레임에서 행을 추출한다. 눈의 색깔이 빨간색인 경우만 찾아보자.
starwars %>% filter(eye_color == "red") # filter(starwars, eye_color == "red") 처럼 써도 동일하다.![]() |
filter(starwars, eye_color =="red") # 파이프라인 연사자를 사용하지 않는 경우에 이렇게 사용될 수 있다. |
실습 mutate()
기존 칼럼값을 활용하여 새로운 칼럼을 생성해보자. bmi 열은 체질량 지수(Body Mass Index, BMI)를 의미한다. BMI는 인간의 체질량과 키를 이용하여 비만 정도를 측정하는 지수로, 체중(kg)을 키(m)의 제곱으로 나누어 계산한다. 따라서 mutate() 함수의 두 번째 인자에서 mass / ((height / 100) ^ 2)를 계산하여 bmi 열에 추가합니다.
starwars %>% mutate(bmi = mass / ((height / 100) ^ 2)) %>% select(name:sex, bmi) ![]() |
파이프라인 연산자가 사용되지 않았다면 아래와 같이 사용될 수 있다.
starwars <- mutate(starwars, bmi = mass / ((height / 100) ^ 2)) select(starwars, name:sex, bmi) |
실습 arrange()
열을 지정하여 데이터를 정렬해보자.
starwars %>% arrange(desc(height)) # 키를 역순(내림차순)으로 정렬해보자. ![]() |
파이프라인 연산자가 사용되지 않았다면 아래와 같이 사용될 수 있다.
arrange(starwars, desc(height)) # desc를 생략하면 오름차순이므로 굳이 asc를 사용할 필요가 없고 사용하면 에러가 난다. |
실습 group_by()
데이터에서 특정 컬럼을 지정해서 그룹 별로 묶어 보자. starwars 데이터 프레임을 species 열을 기준으로 그룹화하고, 각 그룹별로 n과 mass를 계산한 후, n이 1보다 크고 mass가 50보다 큰 그룹만 선택하여 출력하는 코드를 작성해보자.
starwars %>% group_by(species) %>% summarise( n = n(), mass = mean(mass, na.rm = TRUE) ) %>% filter( n > 1, mass > 50 ) ![]() |
먼저 group_by(species)를 사용하여 species 열을 기준으로 데이터를 그룹화한다. 그 다음 summarise() 함수를 사용하여 각 그룹별로 n과 mass를 계산한다. n() 함수는 그룹의 행 수를 계산하며, mean(mass, na.rm = TRUE)는 mass 열의 평균값을 계산합니다. na.rm = TRUE는 결측값이 있는 경우 해당 값을 제외하고 계산하라는 의미이다.
다음으로 filter() 함수를 사용하여 n > 1과 mass > 50인 그룹만 선택한다. 이는 n이 1보다 크고, mass가 50보다 큰 종(species)만 선택하라는 의미입니다.
따라서 이 코드는 starwars 데이터 프레임에서 species 열을 기준으로 그룹화한 후, 각 그룹별로 n과 mass를 계산하고, n이 1보다 크고 mass가 50보다 큰 종만 선택하여 출력하는 코드이다.
파이프라인 연산자가 사용되지 않았다면 아래와 같이 사용될 수 있다.
grouped_starwars <- group_by(starwars, species) summarised_starwars <- summarise(grouped_starwars, n = n(), mass = mean(mass, na.rm = TRUE)) filtered_starwars <- filter(summarised_starwars, n > 1, mass > 50) filtered_starwars |
'언어 > R' 카테고리의 다른 글
[R-010] ggplot2 - geom_point() (0) | 2023.05.03 |
---|---|
[R-009] 패키지 - 데이터 시각화 (0) | 2023.04.16 |
[R-007] 외부 데이터 불러오기, 저장하기 (0) | 2023.04.12 |
[R-006] 데이터 프레임(Data Frame) (0) | 2023.04.04 |
[R-005] 벡터(Vector) 2 (0) | 2023.03.29 |
댓글