在data.table

时间:2018-04-30 13:05:30

标签: r data.table

我想以编程方式访问data.table中的一个列,该列名为" X201804_QTY",但我没有成功。也许有人可以帮忙?谢谢。

#test data
library(data.table)
data <- data.table(test = 1:10, X201804_QTY = 11:20)

#create column name programmatically
col <-  paste0(make.names(format(as.Date("2018-04-30"), "%Y%m")),"_QTY")  

#not working
data[, .(test, col)]
data[, .(test, col), which = FALSE]
data[, c("test", col)]
data[, c("test", col), which = FALSE]

data.table version: 1.10.4-3

3 个答案:

答案 0 :(得分:3)

data.table版本1.10.2开始,您不再需要with = FALSE,您可以使用..作为简写:

data[, ..col]

 #   X201804_QTY
 #1:          11
 #2:          12
 #3:          13
 #4:          14
 #5:          15
 #6:          16
 #7:          17
 #8:          18
 #9:          19
#10:          20

如果您在开发版本(1.10.5)中,要选择coltest,您可以选择:

data[,c(..cols, "test")]

否则我相信你现在必须这样做:

cols2 <- c(cols, "test")
data[, ..cols2]

考虑使用此功能可能是一个好主意,因为在data.table新闻(https://github.com/Rdatatable/data.table/blob/master/NEWS.md)中他们说:

  

请更改为使用..前缀,在接下来的几年内,我们将开始正式弃用并删除with =参数

答案 1 :(得分:1)

data[, col, with = FALSE]
#           ^^^^

不是which。当然,data[, c("test", col), with = FALSE]也会起作用。

<小时/> 前者成功地产生了

    X201804_QTY
 1:          11
 2:          12
 3:          13
 4:          14
 5:          15
 6:          16
 7:          17
 8:          18
 9:          19
10:          20

答案 2 :(得分:1)

这也应该:

data[, .SD, .SDcols = c("test", col)]