[ R ] dplyr 패키지 활용 #3
(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(데이터프레임, 변경할명 = 변경하려고하는컬럼)