如何通过变量 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]]]))
工作得很好。
我有一个数据 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]]]))
工作得很好。