R语言 重命名 data.table 时出现问题



所以我有以下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

并且我希望执行列重命名(除了一列,即"ID")。虽然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"

我对社区的问题是为什么会发生这种情况。

把我的评论放进一个更明显的答案:在 data.table 中,函数setnames允许通过引用重命名列(所有列或列的子集)。

尝试?setnames看看它是如何工作的。基本上,你需要给函数 3 个参数,xoldnewx是你的data.tableold是你想要重命名的变量的名称或索引(如果你想重命名所有变量,old可以是新名称,你不需要提供new),new是新的列名。

在您的示例中,您需要执行以下操作:

setnames(dt1, c("V1", "V2"), c("souksou","mouksou"))

我会建议另一种方法(也许是更简单的方法)。

names(dt1) = gsub('V1', 'souksou', names(dt1))
names(dt1) = gsub('V2', 'mouksou', names(dt1))

最新更新