应该有人已经问过这个问题了,但是我找不到答案。假设我有:
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
等)
发布于 2014-01-08 13:27:53
data.table
包中的setnames
可以在data.frame
或data.table
上运行
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
请注意,更改是通过引用进行的,因此不能复制(即使是对于data.frames!)
发布于 2016-12-27 18:03:05
使用dplyr,您将执行以下操作:
library(dplyr)
df = data.frame(q = 1, w = 2, e = 3)
df %>% rename(A = q, B = e)
# A w B
#1 1 2 3
或者,如果您想使用向量,如@Jelena-bioinf所建议的:
library(dplyr)
df = data.frame(q = 1, w = 2, e = 3)
oldnames = c("q","e")
newnames = c("A","B")
df %>% rename_at(vars(oldnames), ~ newnames)
# A w B
#1 1 2 3
L. D. Nicolas May建议在rename_at
即将被rename_with
取代的情况下进行更改
df %>%
rename_with(~ newnames[which(oldnames == .x)], .cols = oldnames)
# A w B
#1 1 2 3
发布于 2014-01-08 16:14:56
对于不太大的数据帧,另一个解决方案是(基于@thelatemail答案构建):
x <- data.frame(q=1,w=2,e=3)
> x
q w e
1 1 2 3
colnames(x) <- c("A","w","B")
> x
A w B
1 1 2 3
或者,您也可以使用:
names(x) <- c("C","w","D")
> x
C w D
1 1 2 3
此外,您还可以重命名列名的子集:
names(x)[2:3] <- c("E","F")
> x
C E F
1 1 2 3
https://stackoverflow.com/questions/20987295
复制相似问题