qoheleth qoheleth - 3 months ago 16
R Question

rename multiple columns by names

Someone should have asked this already, but i couldn't find an answer.

Say I have

x=data.frame(q=1,w=2,e=3, ...and many many columns...)


what is the most elegant way to rename an arbitrary subset of columns, whose position I don't necessarily know, into some other arbitrary names?

e.g. Say I want to rename
"q"
and
"e"
into
"A"
and
"B"
, what is the most elegant code to do this?

Obviously, I can do a loop

oldnames=c("q","e")
newnames=c("A","B")
for(i in 1:2)names(x)[names(x)==oldnames[i]]=newnames[i]


But I wonder if there is a better way? Maybe using some of the packages? (
plyr::rename
etc.)

Answer

setnames from the data.tablepackage will work on data.frames or data.tables

library(data.table)
d <- data.frame(a=1:2,b=2:3,d=4:5)
setnames(d, old = c('a','d'), new = c('anew','dnew'))
d


 #   anew b dnew
 # 1    1 2    4
 # 2    2 3    5

Note that changes are made by reference, so no copying (even for data.frames!)

Comments