如何通过变量 select data.table 的列

How to select a column of a data.table via a variable

我有一个数据 table,而不是通过(硬编码)"dt$x" 来寻址特定列(比如列 "x"),我想得到这是通过促进变量以动态方式完成的,即。 "dt${var}".

我已经尝试过 "dt[, eval(quote(var)), with=FALSE)" 以及 "dt[, c(var), with=FALSE)",但不幸的是,这在我手头的特定情况下不起作用。

我想要实现的是打开一个文本连接到 data.table 的动态选择的列。

工作

dt_txt_con <- textConnection(as.character(DT$x))
dt_txt <- data.table(read.table(dt_txt_con, sep=","))
close(dt_txt_con)

不工作

#dt_txt_con <- textConnection(as.character(as.list(DT[,c(var), with=FALSE])))
dt_txt_con <- textConnection(as.character(DT[, eval(quote(var)), with=FALSE]))
dt_txt <- data.table(read.table(dt_txt_con, sep=","))
close(dt_txt_con)

导致错误消息

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
  line 1 did not have 38 elements

如何最好地解决这个问题?

-Sil68

编辑

示例数据(摘自内存中的大量数据 table,无文件)

DT <- data.table(
            "age,sex,geo\time" = c("TOTAL,F,AD", "TOTAL,F,AL", "TOTAL,F,AM", "TOTAL,F,AT", "TOTAL,F,AZ"),
            "2014" = c(NA,    NA,      NA,      4351253, NA),
            "2013" = c(37408, NA,      NA,      4328238, 4707690),
            "2012" = c(38252, NA,      1684000, 4309977, 4651601),
            "2011" = c(38252, 1409931, 1679066, 4296293, 4594023),
            "2010" = c(40296, NA,      1673656, 4285442, 4542083)
        )

变量

var <- "age,sex,geo\time"

正如大卫所说,

dt_txt_con <- textConnection(as.character(DT[, .SD[[var]]]))

工作得很好。