본문 바로가기
R

R - dplyr 패키지 (2) (group_by/ left_join/ bind_rows)

by IT두잇 2022. 3. 17.

R에서는 dplyr 패키지를 이용하여 데이터 전처리를 진행할 수 있습니다.

dplyr 함수는 아래 8가지가 있으며, 오늘은 마지막 3가지 함수에 대해 알아보려고 합니다.

 

  • filter( )
  • select( )
  • arrange( )
  • mutate( )
  • summarise( )
  • group_by( )
  • left_join( )
  • bind_rows( )

group_by( ): 집단별로 나누기

데이터를 필터링 할 때, 특정 집단별로 나누고 싶다면 group_by( ) 함수를 사용합니다.

 

예시 1) 성별별로 데이터 나누기

df %>% group_by(sex)

예시 2) 제조사별로 시내주행 평균 출력

df %>% group_by(manufacturer) %>%
   summarise(mean(city))

 

예시 3) 1차는 제조사, 2차는 자동차 모델별로 필터링

그룹을 1차, 2차 등 여러 순서로 묶을 때 아래와 같이 작성합니다.

df %>% group_by(manufacturer, model) %>%
   summarise(mean(city))

 

 


left_join( ) : 데이터 합치기 (열)

예시) 중간고사 데이터와 기말고사 데이터 합치기

 

1. 중간고사와 기말고사 데이터 생성

# 중간고사 데이터 생성
test1 <- data.frame(id = c(1,2,3,4,5),
										midterm = c(60,80,70,65,90))

# 기말고사 데이터 생성
test2 <- data.frame(id = c(1,2,3,4,5), 
										final = c(70,80,65,83,95))

결과값:

#test1 #test2

id midterm id final

1 60 1 70

2 80 2 80

3 70 3 65

4 65 4 83

5 90 5 95

 

2. id를 기준으로 합쳐 total이라는 데이터에 할당

total <- left_join(test1, test2, by = 'id')

결과값:

#total

id midterm final

1 60 70

2 80 80

3 70 65

4 65 83

5 90 95

 


bind_rows( ): 데이터 합치기 (행)

예시) 그룹 A와 그룹 B의 시험 점수 합치기

 

1. 그룹 A와 B의 시험 데이터 생성

# group A 데이터 생성
group_a <- data.frame(id = c(1,2,3,4,5), 
											test = c(60,80,70,95,68))

# group B 데이터 생성
group_b <- data frame(id=c(1,2,3,4,5), 
											test = c(70,83,65,95,80))

결과값:

#group A #group B

id midterm id final

1 60 1 70

2 80 2 83

3 70 3 65

4 95 4 95

5 68 5 80

 

2. 행을 기준으로 데이터 합치기

group_all <- bind_rows(group_a, group_b)

결과값:

#group_all

id midterm

1 60

2 80

3 70

4 95

5 68

1 70

2 83

3 65

4 95

5 80