[R] data.frame의 여러개 칼럼 이름을 old_col:new_col 의 매핑 테이블을 사용해서 변경하기
R 분석과 프로그래밍/R 데이터 전처리 2022. 1. 9. 23:12이번 포스팅에서는 R data.frame에서 여러개의 칼럼 이름을 '변경 전 칼럼 이름 : 변경 후 칼럼 이름'의 매핑 테이블 (old_column_name : new_column_name mapping table) 을 이용해서 한꺼번에 변경하는 방법을 소개하겠습니다. data.frame에 칼럼 개수가 엄청 많고, 특정 칼럼에 대해서 선별적으로 칼럼 이름을 변경하고 싶을 때 전:후 칼럼 이름 매핑 테이블을 사용하는 이번 포스팅의 방법을 사용하면 편리합니다.
(1) 모든 칼럼을 순서대로 칼럼 이름을 변경하고 싶은 경우
참고로, R 에서 names(), rename() 등의 함수를 이용해서 칼럼 이름을 변경하는 방법은 https://rfriend.tistory.com/41 를 참고하세요.
먼저, "X1" ~ "X10" 까지의 10개 칼럼을 가지는 예제 data.frame 을 만들어보겠습니다.
## -- creating a sample data.frame with 10 columns
df <- data.frame(matrix(1:30, nrow=3))
print(df)
# X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
# 1 1 4 7 10 13 16 19 22 25 28
# 2 2 5 8 11 14 17 20 23 26 29
# 3 3 6 9 12 15 18 21 24 27 30
다음으로, '변경 전 칼럼 이름 : 변경 후 칼럼 이름' 매핑 테이블을 만들어보겠습니다. 아래 예제에서는 변경 전 칼럼 이름 "X1"~"X10" 을 --> 변경 후 칼럼 이름 "var1"~"var10" 의 매핑 테이블 data.frame을 만들었습니다. (특정 칼럼만 선별적으로 변경하고 싶으면 해당 칼럼의 "변경 전 : 변경 후 매핑 테이블"을 만들면 됩니다.)
## -- creating a key(old column name):value(new column name) mapping table
old_col_nm <- names(df)
print(old_col_nm)
# [1] "X1" "X2" "X3" "X4" "X5" "X6" "X7" "X8" "X9" "X10"
col_cnt <- ncol(df) # 10
new_col_nm <- paste0(c(rep("var", col_cnt)), 1:col_cnt)
print(new_col_nm)
# [1] "var1" "var2" "var3" "var4" "var5" "var6" "var7" "var8" "var9" "var10"
df_col_dict <- data.frame("old_col_nm" = old_col_nm, "new_col_nm" = new_col_nm)
print(df_col_dict)
# old_col_nm new_col_nm
# 1 X1 var1
# 2 X2 var2
# 3 X3 var3
# 4 X4 var4
# 5 X5 var5
# 6 X6 var6
# 7 X7 var7
# 8 X8 var8
# 9 X9 var9
# 10 X10 var10
마지막으로, dplyr 패키지의 rename_at() 함수를 사용해서 "변경 전 칼럼 이름(old_col_nm)"을 "변경 후 칼럼 이름(new_col_nm)" 으로 변경해 보겠습니다.
## -- changing data.frame's column names using key(old_col):value(new_col) mapping table
library(dplyr)
df_new <- df %>%
rename_at(vars(as.character(df_col_dict$old_col_nm)),
~ as.character(df_col_dict$new_col_nm))
print(df_new)
# var1 var2 var3 var4 var5 var6 var7 var8 var9 var10
# 1 1 4 7 10 13 16 19 22 25 28
# 2 2 5 8 11 14 17 20 23 26 29
# 3 3 6 9 12 15 18 21 24 27 30
(2) 특정 칼럼만 선별적으로 이름을 바꾸고 싶은 경우
아래의 'col_dict' 테이블을 칼럼 이름을 변경하고자 하는 특정 칼럼의 old_col_nm : new_col_nm 으로 만들어서 적용하면 됩니다.
가령, 기존의 c1~c5'까지의 칼럼들 중에서 'c2', 'c4' 의 2개 칼럼만 선별적으로 변경하고 싶으면 아래처럼 'col_dict' 테이블을 만들어서 적용하면 돼요.
old_col_nm = c("c2", "c4")
new_col_nm = c("v2", "v4")
col_dict <- data.frame("old" = old_col_nm, "new" = new_col_nm)
print(col_dict)
# old new
# 2 c2 v2
# 4 c4 v4
library(dplyr)
c_df_new <- c_df %>%
rename_at(vars(as.character(col_dict$old)), ~ as.character(col_dict$new))
print(c_df_new)
# c1 v2 c3 v4 c5
# 1 1 4 7 10 13
# 2 2 5 8 11 14
# 3 3 6 9 12 15
이번 포스팅이 많은 도움이 되었기를 바랍니다.
행복한 데이터 과학자 되세요! :-)