使用R,data.table,按列名称而不是位置

时间:2016-04-07 22:36:49

标签: r data.table names

我有一个类似于此的数据表,除非更大:

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。

0 个答案:

没有答案