【问题标题】:Select programmatically column names in data.table [duplicate]在data.table中以编程方式选择列名[重复]
【发布时间】:2018-04-30 13:05:29
【问题描述】:

我想以编程方式访问 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

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    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= 参数

    【讨论】:

    • 好的。很有用。我不知道。在这种情况下,如果 data[, ..(test, col)] 不起作用,如何选择测试列。
    • @Sven,查看我的更新。这取决于您是否使用开发版本。如果你是,那很简单。如果你不是,那不幸的是有点烦人
    【解决方案2】:

    是的

    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
    

    【讨论】:

    • 好的,我想我会收工回家...谢谢!
    • @Sven:不客气。
    【解决方案3】:

    这也应该这样做:

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

    【讨论】:

      猜你喜欢
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 2013-02-07
      • 1970-01-01
      • 2021-04-12
      • 2019-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多