所以我有以下data.table问题:
library(data.table)
dt1<-data.table(V1=runif(10),V2=sample(10),ID=1:10)
dt1
V1 V2 ID
1: 0.26880759 10 1
2: 0.59148373 9 2
3: 0.15106101 8 3
4: 0.64780998 5 4
5: 0.09067745 7 5
6: 0.57337100 2 6
7: 0.17920313 3 7
8: 0.87948063 4 8
9: 0.25167438 1 9
10: 0.82715461 6 10
我希望执行列重命名(除了一列,即&#34; ID&#34;)。虽然names(dt1[,-"ID"])
可以正常工作但是产生:
[1] "V1" "V2"
以下命令失败:
names(dt1[,-"ID"])<-c("souksou","mouksou")
Error in -"ID" : invalid argument to unary operator
当然,问题是通过以下方式绕过:
names(dt1)[!(names(dt1) %in% "ID")]<-c("souksou","mouksou")
names(dt1)
[1] "souksou" "mouksou" "ID"
我向社区提出的问题是为什么会发生这种情况。
答案 0 :(得分:3)
将我的评论放在一个更明显的答案中:在data.table中,函数setnames
允许通过引用重命名列(所有这些列或其子集)。
尝试?setnames
查看其工作原理。基本上,你需要给函数3个参数x
,old
和new
:x
是你的data.table
,old
是名字或者您想要重命名的变量的索引(如果要重命名所有变量,old
可以是新名称,而您不需要提供new
)和{{1}是新的列名。
在您的示例中,您需要执行以下操作:
new