R/R basic

열 (column) 이름 바꾸기: colnames or rename

시키테이 2020. 5. 3. 07:38
반응형

R에서 열 (column) 이름을 바꾸는 방법은 크게 두가지가 있습니다. 우선 별 다른  library 없이 데이터프레임 안에서 바꿀 경우는 colnames()를 쓰면 됩니다.

colnames(df)[1]<-'New column'

 

위 명령어는 df라는 데이터의 첫번째 열을 'New column'이라는 이름으로 바꾸라는 의미입니다. 그러나 최근에는 dplyr library를 많이 쓰면서 다음과 같이 바꾸기도 합니다. 참고로 dplyr는 데이터를 바꿔줄 때, tidyr는 클렌징을 할 때 많이 쓰는 library입니다. 

library(dplyr)
rename(df, new_column=old_column)

위의 명령어가 사실 저 직관적이죠? 그래서 dplyr를 많이 쓰는 것 같습니다.  rename 명령어 후에는 새로운 열 이름이 먼저 오고 (new_column) 그 다음에 기존 컬럼 이름(old_column)이 나중에 오는 걸 유의하셔야 합니다. 

 

그런데 만약에 바꿔야 할 열이 너무 많아서 일일이 저 명령어를 치기 조금 귀찮다면 어떻게 해야 할까요? 예를 들어 기존 열 이름이 a1, a2, ...a10까지 가는데 이걸 b1, b2,... b10으로 바꾸려면? 여전히 rename으로 다음과 같이 해주는 게 좋다고 생각하지만, 이 때는 %>%라는 연산자를 이용해서 하는 게 좀 편합니다. %>%는 앞의 명령어를 한 다음에 그 다음 것을 해라는 연산자 정도로 생각해주시면 됩니다. 

df %>% rename(b1=a1, b2=a2, ...., b10=a10)

아예 벡터를 만들어서 rename 한 칼에 해주는 것도 나쁘지 않은 것 같습니다. 

oldnames=c('a1', 'a2' ... ,'a10')
newnames=c('b1', 'b2', ... ,'b10')

df %>%remane_at(vars(oldnames), ~newnames)

검색을 해보니 data.table이라는 library를 통해서 하기도 하네요. 열 이름이 중구난방이라면  data.table의 setnames을 통해서 일괄적으로 바꿔주는것도 좋은 옵션이 될 듯 합니다. 

library(data.table)
setnames(df, old = c('a1','a2', .. 'a10'), new = c('b1','b2', .. 'b10')) 
반응형