我有一个类似于此的数据表,除非更大:
set.seed(1)
dt <- data.table(t1=round(rnorm(5),1), t2=round(rnorm(5),1), t3=round(rnorm(5),1),
t4=round(rnorm(5),1), t5=round(rnorm(5),1), t6=round(rnorm(5),1),
t7=round(rnorm(5),1),t8=round(rnorm(5),1))
哪个输出:
t1 t2 t3 t4 t5 t6 t7 t8
1: -0.6 -0.8 1.5 0.0 0.9 -0.1 1.4 -0.4
2: 0.2 0.5 0.4 0.0 0.8 -0.2 -0.1 -0.4
3: -0.8 0.7 -0.6 0.9 0.1 -1.5 0.4 -0.1
4: 1.6 0.6 -2.2 0.8 -2.0 -0.5 -0.1 1.1
5: 0.3 -0.3 1.1 0.6 0.6 0.4 -1.4 0.8
我想将列t3:t8重命名为hour_t3:hour_t8,输出如下:
t1 t2 hour_t3 hour_t4 hour_t5 hour_t6 hour_t7 hour_t8
1: -0.6 -0.8 1.5 0.0 0.9 -0.1 1.4 -0.4
2: 0.2 0.5 0.4 0.0 0.8 -0.2 -0.1 -0.4
3: -0.8 0.7 -0.6 0.9 0.1 -1.5 0.4 -0.1
4: 1.6 0.6 -2.2 0.8 -2.0 -0.5 -0.1 1.1
5: 0.3 -0.3 1.1 0.6 0.6 0.4 -1.4 0.8
这两种方法有效:
names(dt)[3:8] <- c(paste0("hour_t", 3:8))
和
setnames(dt, 3:8, c(paste0("hour_t", 3:8)))
但是,我希望能够使用类似的东西通过引用进行分组:
setnames(dt, "t3":"t8", c(paste0("hour_t", 3:8)))
当我使用c(“t3”:“t8”)这样的语法或子集时,我收到以下错误:
Error in "t3":"t8" : NA/NaN argument
In addition: Warning messages:
1: In setnames(dt, c("t3":"t8"), c(paste0("hour_t", 3:8))) :
NAs introduced by coercion
2: In setnames(dt, c("t3":"t8"), c(paste0("hour_t", 3:8))) :
NAs introduced by coercion
关于如何通过引用/列名而不是按位置重命名列的任何想法都将非常感激。感谢。
我仍然是data.table的新手,我正在使用data.table版本1.9.6。