按名称重命名多个列

119

应该已经有人问过这个问题了,但我找不到答案。 假设我有:

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

如何以最优雅的方式将一组任意列(其位置未必已知)重命名为其他任意名称?

例如,如果我想将 "q""e" 重命名为 "A""B",最优雅的代码是什么?

显然,我可以使用循环:

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

但我想知道是否有更好的方法?也许可以使用一些包(如 plyr::rename 等)?

21个回答

0
这是你需要的函数: 只需将x传递给rename(X),它将重命名所有出现的值,如果不在其中,则不会出错。
rename <-function(x){
  oldNames = c("a","b","c")
  newNames = c("d","e","f")
  existing <- match(oldNames,names(x))
  names(x)[na.omit(existing)] <- newNames[which(!is.na(existing))]
  return(x)
}

3
这似乎与JoelKuiper的回答相同,但被重新构造为函数...... - Jaap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接