Programming/R

[ R ] dplyr 패키지 활용 #3

yul_S2 2022. 11. 19. 13:31
반응형

(9) 데이터프레임 병합

  • 서로 다른 데이터프레임을 대상으로 공통 컬럼을 이용하여 하나의 데이터프레임을 병합하는 join() 함수

ex ) inner_join 함수

inner_join(df1, df2, x)

 
  •  

 

 

ex ) left_join

left_join(df1, df2, x)

 

 

 

ex ) right_join

right_join(df1, df2, x)

 

 

 

ex ) full_join

full_join(df1, df2, x)

 
  •  

 

 

 

(9) 데이터프레임 합치기

  • 서로 다른 데이터프레임을 대상으로 행 단위 또는 열 단위로 합치는 함수
  • bind관련 함수

- bind_rows(df1, df2)

- bind_cols(df1, df2)

 

 

ex ) 세로 결합

library(dplyr)
a <- data.frame(id = c(1, 2, 3, 4, 5), score = c(60, 80, 70, 90, 85))
b <- data.frame(id = c(3, 4 , 5, 6, 7), weight = c(80, 90, 85, 60, 85))

bind_rows(a, b)
#    id score weight
# 1   1    60     NA
# 2   2    80     NA
# 3   3    70     NA
# 4   4    90     NA
# 5   5    85     NA
# 6   3    NA     80
# 7   4    NA     90
# 8   5    NA     85
# 9   6    NA     60
# 10  7    NA     85
  • bind_rows 함수로 나뉘어져 있는 데이터를 세로로 결합할 수 있다.

 

#두 개의 데이터프레임을 행 단위로 합치기

df1 <- data.frame(x = 1:5, y = rnorm(5))
df2 <- data.frame(x = 2:6, z = rnorm(5))

df1
# x           y
# 1 1 -0.39537513
# 2 2  0.64772487
# 3 3  0.17207818
# 4 4  0.05129927
# 5 5 -1.01639747

df2
# x           z
# 1 2  0.08208568
# 2 3 -1.13912786
# 3 4  1.67671381
# 4 5 -1.41466419
# 5 6 -0.78240741

df_rows <- bind_rows(df1, df2)
df_rows
# x           y           z
# 1  1 -0.39537513          NA
# 2  2  0.64772487          NA
# 3  3  0.17207818          NA
# 4  4  0.05129927          NA
# 5  5 -1.01639747          NA
# 6  2          NA  0.08208568
# 7  3          NA -1.13912786
# 8  4          NA  1.67671381
# 9  5          NA -1.41466419
# 10 6          NA -0.78240741

 

# rbind 함수로 행을 결합하여 반환한다.

rbind 함수로 행을 결합하기 위해서는 Data Frame의 열 개수, 칼럼 이름이 같아야 한다

a <- data.frame(id = c(1, 2, 3, 4, 5), score = c(60, 80, 70, 90, 85))
a
#    id score
# 1  1    60
# 2  2    80
# 3  3    70
# 4  4    90
# 5  5    85

b <- data.frame(id = c(6, 7 , 8), score = c(80, 90, 85))
b
#    id score
# 1  6    80
# 2  7    90
# 3  8    85

rbind(a, b)
#    id score
# 1  1    60
# 2  2    80
# 3  3    70
# 4  4    90
# 5  5    85
# 6  6    80
# 7  7    90
# 8  8    85

 

ex ) 가로 결합

dplyr 패키지의 bind_cols 함수로 나뉘어져 있는 데이터를 가로로 결합할 수 있다.

bind_cols(dataframe1, dataframe2)

 

# 두 개의 데이터프레임을 열 단위로 합치기

df_cols <- bind_cols(df1, df2)
df_cols
#   x...1                   y x...3                   z
# 1     1 -0.39537513     2  0.08208568
# 2     2  0.64772487     3 -1.13912786
# 3     3  0.17207818     4  1.67671381
# 4     4  0.05129927     5 -1.41466419
# 5     5 -1.01639747     6 -0.78240741

 

 

# cbind 함수로 열을 결합하여 반환한다

a <- data.frame(id = c(1, 2, 3, 4, 5), score = c(60, 80, 70, 90, 85))
a
#   id score
# 1  1    60
# 2  2    80
# 3  3    70
# 4  4    90
# 5  5    85

b <- data.frame(age = c(20, 19 , 20, 19, 21), weight = c(80, 90, 85, 60, 85))
b
#   age weight
# 1  20     80
# 2  19     90
# 3  20     85
# 4  19     60
# 5  21     85

cbind(a, b)
#    id score age weight
# 1  1    60  20     80
# 2  2    80  19     90
# 3  3    70  20     85
# 4  4    90  19     60
# 5  5    85  21     85

 

 

# 열의 잘못된 결합으로 반환한다

a <- data.frame(id = c(1, 2, 3, 4, 5), score = c(60, 80, 70, 90, 85))
a
# id score
# 1  1    60
# 2  2    80
# 3  3    70
# 4  4    90
# 5  5    85

b <- data.frame(id = c(3, 4 , 5, 6, 7), weight = c(80, 90, 85, 60, 85))
b
# id weight
# 1  3     80
# 2  4     90
# 3  5     85
# 4  6     60
# 5  7     85

cbind(a, b)
# id score id weight
# 1  1    60  3     80
# 2  2    80  4     90
# 3  3    70  5     85
# 4  4    90  6     60
# 5  5    85  7     85

 

 

# 다른 관측치 열의 결합

열을 결합하기 위해서는 Data Frame의 행 개수가 서로 같지 않아도 된다.

merge 함수로 열을 결합하여 반환한다.

 

cf) merge 함수는 키를 기준으로 열을 결합하여 반환한다.

merge(A, B, by = key, all = FALSE, all.x = all, all.y = all) 함수

A 매개변수: 객체를 설정한다.

B 매개변수: 객체를 설정한다.

by 옵션: 결합할 기준이 되는 칼럼을 설정한다.

all 옵션: 모든 열을 결합하며 기본값은 FALSE다.

all.x 옵션: A 객체를 기준으로 열을 결합한다.

all.y 옵션: B 객체를 기준으로 열을 결합한다.

 

 

 

(9) 컬럼명 수정하기

  • 데이터프레임을 구성하는 컬럼명을 수정하는 rename()함수 사용
  • rename(데이터프레임, 변경후컬럼명 = 변경전컬럼명)

 

ex ) 객체명을 변경하여 반환한다.

library(dplyr)
df <- data.frame(one = c(4, 3, 8))
df
#   one
# 1   4
# 2   3
# 3   8

df <- rename(df, "원" = one)
df
#    원
# 1  4
# 2  3
# 3  8

 

# 데이터프레임의 컬럼명 수정

df_cols
# x...1           y x...3           z
# 1     1 -0.39537513     2  0.08208568
# 2     2  0.64772487     3 -1.13912786
# 3     3  0.17207818     4  1.67671381
# 4     4  0.05129927     5 -1.41466419
# 5     5 -1.01639747     6 -0.78240741

df_rename <- rename(df_cols, x2=x...1)
df_rename <- rename(df_rename, y2=y)
df_rename
# x2          y2 x...3           z
# 1  1 -0.39537513     2  0.08208568
# 2  2  0.64772487     3 -1.13912786
# 3  3  0.17207818     4  1.67671381
# 4  4  0.05129927     5 -1.41466419
# 5  5 -1.01639747     6 -0.78240741
  • rename(데이터프레임, 변경할명 = 변경하려고하는컬럼)

 

 

반응형