2024-07-22

R 배우기 - dplyr사용하기

R로 데이터 분석할 때 dplyr가 정말 유용합니다. 예를 들어, dplyr를 쓰면 for loop를 쓸 일이 거의 없어요.

그럼 기본적인 사용법을 볼까요. 

dplyr 패키지를 인스톨하고 (install.packages("dplyr")), 라이브러리를 불러줍니다.

> library(dplyr)

data frame을 하나 만들어봅시다.

> df <- data.frame(name=c('Alice', 'Brian', 'Chris'), age=c(10, 20, 30), height=c(5.2, 5.7, 6))
> df
   name age height
1 Alice  10    5.2
2 Brian  20    5.7
3 Chris  30    6.0

dplyr에서는 %>% 라는 "파이프"를 사용하는데요, 파이프를 사용하면 왼쪽의 결과물이 자동으로 오른쪽 함수의 input이 됩니다.

예를 들어, dplyr의 filter()라는 함수는 row를 선택할 때 사용합니다. Alice의 데이타를 보려면,

> filter(df, name == 'Alice')
   name age height
1 Alice  10    5.2

파이프로도 똑같은 일을 할 수 있습니다.

> df %>% filter(name == 'Alice')
   name age height
1 Alice  10    5.2

파이프 %>% 왼쪽에 있는 df가 오른쪽에 있는 filter()함수의 input이 되는 것입니다.

dplyr에서 많이 쓰이는 select()라는 함수는 column선택할 때 사용됩니다. name, age, height의 세 개의 컬럼 중에서, name과 age만 보고 싶다면,

> select(df, name, age)
   name age
1 Alice  10
2 Brian  20
3 Chris  30

파이프로는 

> df %>% select(name, age)
   name age
1 Alice  10
2 Brian  20
3 Chris  30

여기서도 df가 select()함수의 input으로 들어간 것입니다.

만약 이름이 Alice가 몇 살인지 알고 싶다면, 위의 두 함수를 한 번 씩 적용하면 되겠죠.

> df1 <- filter(df, name == 'Alice')
> select(df1, name, age)
   name age
1 Alice  10

먼저 filter한 다음에 그 결과물을 df1에 잠시 저장한 다음 select했는데요. 이렇게 함수를 순차적으로 사용할 때, 파이프의 장점이 드러납니다. 

왜냐하면 파이프의 왼쪽의 결과물이 오른쪽 함수의 input이 되니까요.

> df %>% filter(name == 'Alice') %>% select(name, age)

   name age
1 Alice  10

이렇게 파이프를 사용하면, 중간에 df1을 따로 만들 필요가 없어요. 처음 filter()함수의 결과물이 select()함수의 input으로 들어간 것입니다.

그리고 위의 예제에서 보이는 것처럼, 어떤 순서대로 뭘 했는지 그 흐름대로 읽을 수 있으니 나중에 봤을 때에도 이해하기 편하죠. 

여기까지가, dplyr의 기본적인 사용 방법 입니다. 

(dplyr의 다양한 함수들은 https://dplyr.tidyverse.org 에서 찾아볼 수 있습니다.)