본문 바로가기
  • plotly로 바로쓰는 동적시각화 in R & 파이썬
데이터 전처리

열 이름 바꾸기 in R

by 아참형인간 2022. 6. 21.
rename.knit

사용데이터 : https://2stndard.tistory.com/68

데이터프레임 열 이름 변경

R에서 데이터를 담아 사용하는 데이터프레임은 R에서 데이터프레임과 데이터를 직접 입력하여 만들수 있지만 보통은 외부에서 생성된 데이터를 불러들여와 사용하는 것이 일반적이다. 이렇게 생성되는 데이터프레임의 가장 처음 만나는 어려움은 열 이름의 설정이 썩 마음에 들지 않는다는 것이다. 엑셀이나 csv에서 열 이름을 잘 설정한 후에 데이터프레임을 만드는 것이 가장 좋은 방법이지만 보통은 일단 불러들여와서 수정하는 경우가 더 많았을 것이다. 또 데이터프레임을 사용하다 보면 열 이름이 마음에 들지 않아 변경하기를 원할 때가 있을 것이다. 이런 경우에 어떠한 방법이 있는지 살펴본다.

샘플 데이터로 사용하는 데이터프레임 중에 학과별 취업 정보가 담긴 ‘df_취업률’의 데이터를 사용하여 열 이름을 변경해 본다. ’df_취업률’ 데이터 프레임은 열의 수가 총 34개로 너무 많기 떄문에 이 중 일부만 다음과 같이 선택하여 사용하도록 하겠다.

rename_df_취업률 <- df_취업률[, c(1:3, 7:12)]

str(rename_df_취업률)
## tibble [9,290 x 9] (S3: tbl_df/tbl/data.frame)
##  $ 조사기준일    : chr [1:9290] "2020.12.31" "2020.12.31" "2020.12.31" "2020.12.31" ...
##  $ 학제          : chr [1:9290] "전문대학(4년제)" "전문대학(4년제)" "전문대학(3년제)" "전문대학(3년제)" ...
##  $ 과정구분      : chr [1:9290] "전문대학과정" "전문대학과정" "전문대학과정" "전문대학과정" ...
##  $ 학과코드      : chr [1:9290] "C06010100004" "C06010100008" "C01010100002" "C01010100003" ...
##  $ 학과명        : chr [1:9290] "간호학과" "간호학과(4년제)" "관광일본어과" "관광일본어전공" ...
##  $ 학위구분      : chr [1:9290] NA NA NA NA ...
##  $ 졸업자_계     : num [1:9290] 391 482 31 1 74 27 46 32 54 172 ...
##  $ 취업률_계     : num [1:9290] 81.7 81.6 40.9 0 29.9 37.5 36.8 41.4 39.6 46.4 ...
##  $ 취업자_합계_계: num [1:9290] 317 390 9 0 20 9 14 12 19 70 ...

전체 열 이름의 변경

데이터프레임을 불러들어온 이후 전체 열이름을 재설정하고자 하는 경우에는 colnames()를 사용한다. colnames()의 매개변수에 데이터프레임을 넣어주고 c()를 사용하여 열의 첫번째 이름부터 마지막 이름까지 벡터를 만들어 대입해 주면 열 이름이 설정된다. 만약 문자열 벡터를 설정해주지 않는다면 해당 데이터프레임의 전체 열 이름을 반환해준다.

colnames_origin <- colnames(rename_df_취업률)

colnames_origin
## [1] "조사기준일"     "학제"           "과정구분"       "학과코드"      
## [5] "학과명"         "학위구분"       "졸업자_계"      "취업률_계"     
## [9] "취업자_합계_계"
colnames(rename_df_취업률) <- c('조사일', '학교급', '대학과정', '학과코드', '학과이름', '학위구분', '졸업자수', '취업률', '취업자수')

colnames(rename_df_취업률)
## [1] "조사일"   "학교급"   "대학과정" "학과코드" "학과이름" "학위구분" "졸업자수"
## [8] "취업률"   "취업자수"

만약 열의 개수와 문자열 벡터의 길이가 다르다면 앞에서부터 열의 이름이 바뀌고 뒤에 설정값이 없는 열 이름은 ’NA’로 채워진다.

colnames(rename_df_취업률) <- c('조사일', '학교급', '대학과정')

colnames(rename_df_취업률)
## [1] "조사일"   "학교급"   "대학과정" NA         NA         NA         NA        
## [8] NA         NA

일부 열 이름의 변경

위와 같이 전체 열 이름을 변경하는 것이 아니고 일부 열의 이름을 변경하고자 한다면 사용할 수 있는 몇가지 방법이 있다.

1. 열 번호를 사용하는 경우 : colnames(), names()의 사용

colnames()는 전체 열 이름에 대한 연산에 대해 사용하지만 일부 열을 인덱싱 한 다음 사용하면 해당 열에 대해서만 열 이름을 바꿀 수 있다.

다음은 4, 5, 6 번째 열의 이름을 바꾸는 방법이다.

colnames(rename_df_취업률)[c(4, 5, 6)]
## [1] NA NA NA
colnames(rename_df_취업률)[c(4, 5, 6)] <- c('학과코드', '학과이름', '학위구분') 

colnames(rename_df_취업률)
## [1] "조사일"   "학교급"   "대학과정" "학과코드" "학과이름" "학위구분" NA        
## [8] NA         NA

이와 같은 방법으로 names()를 사용할 수 있는데 colnames()는 열 이름에 한해 사용하지만 names()는 R에서 사용되는 다양한 객체에 사용할 수 있다.

다음은 7, 8, 9 번째 열의 이름을 바꾸는 방법이다.

names(rename_df_취업률)[c(7, 8, 9)]
## [1] NA NA NA
names(rename_df_취업률)[c(7, 8, 9)] <- c('졸업자수', '취업률', '취업자수') 

names(rename_df_취업률)
## [1] "조사일"   "학교급"   "대학과정" "학과코드" "학과이름" "학위구분" "졸업자수"
## [8] "취업률"   "취업자수"

2. dplyr에서 사용하는 경우 : rename(), setNames()의 사용

앞서 설명한 colnames()names()dplyr에서는 사용하기가 어렵다. 이렇게 열 이름을 바꾸기 위해 dplyrrename()을 제공한다. rename()은 ’new_name = old_name’의 형태로 바뀔 열 이름과 바꿀 열 이름을 설정함으로써 열 이름을 변경할 수 있다.

rename()은 열 이름을 바꾸지만 1)열에는 영향이 없고 2)열 순서에 영향이 없고 3)데이터프레임 특성에 영향이 없고 4) 그룹화된 데이터프레임에도 새 이름이 반영된다.

rename_df_취업률 <- rename_df_취업률 |>
  rename('조사기준일' = '조사일', '학교종류' = '학교급', '학위과정' = '대학과정')

colnames(rename_df_취업률)
## [1] "조사기준일" "학교종류"   "학위과정"   "학과코드"   "학과이름"  
## [6] "학위구분"   "졸업자수"   "취업률"     "취업자수"

rename()을 사용할 때는 바뀔 열 이름과 바꿀 열 이름을 모두 사용해야 하기 떄문에 열의 일부를 바꿀때 효과적으로 사용된다. 하지만 열 전체의 이름을 바꾸어야 한다면 입력해야하는 코드가 길어져서 사용이 힘들다. 이런 경우 사용되는 것이 setNames()이다. setNames()colnames()와 같이 처음부터 마지막까지의 열 이름을 설정함으로써 사용한다.

colnames_origin
## [1] "조사기준일"     "학제"           "과정구분"       "학과코드"      
## [5] "학과명"         "학위구분"       "졸업자_계"      "취업률_계"     
## [9] "취업자_합계_계"
rename_df_취업률 <- rename_df_취업률 |>
  setNames(colnames_origin)

colnames(rename_df_취업률)
## [1] "조사기준일"     "학제"           "과정구분"       "학과코드"      
## [5] "학과명"         "학위구분"       "졸업자_계"      "취업률_계"     
## [9] "취업자_합계_계"

dplyr를 사용하는 경우 또 하나 열 이름을 바꿀수 있는 방법이 있는데 mutate()를 사용하는 방법이다. 사실 이 방법은 열 이름을 바꾼다기 보다는 열을 복사하면서 열 이름을 바꾸는 방식이다. 데이터프레임의 열을 조작해야 하는데 조작 전의 데이터와 비교해야한다면 이 방법을 사용할 수 있다.

rename_df_취업률 <- rename_df_취업률 |>
  mutate(졸업자수_origin = 졸업자_계, 취업률_origin = 취업률_계, 취업자수_origin = 취업자_합계_계)

colnames(rename_df_취업률)
##  [1] "조사기준일"      "학제"            "과정구분"        "학과코드"       
##  [5] "학과명"          "학위구분"        "졸업자_계"       "취업률_계"      
##  [9] "취업자_합계_계"  "졸업자수_origin" "취업률_origin"   "취업자수_origin"

댓글