사용데이터 : 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
에서는 사용하기가 어렵다. 이렇게 열 이름을 바꾸기 위해 dplyr
는 rename()
을 제공한다. 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"
'데이터 전처리' 카테고리의 다른 글
행정구역별 연령별 학생 비율 구하기 in R - mutate_all, mutate_at, mutate_if (0) | 2022.07.13 |
---|---|
누적합과 누적평균 in R (0) | 2022.06.26 |
일별(일간) 데이터를 주별(주간) 데이터로 만들기 in R (0) | 2022.06.18 |
일별 데이터를 월별 데이터로 만들기 (0) | 2022.06.16 |
데이터프레임 합치기(Merge) in R (0) | 2022.06.12 |
댓글