从data.table获取字符串列

时间:2012-03-25 21:06:05

标签: r data.table

rawdata.table,以下代码有效:

raw[,r_responseTime] #Returns the whole column
raw[,c_filesetSize]  #Same as above, returns column
plot(raw[,r_responseTime]~raw[,c_filesetSize]) #draws something

现在我想从字符串中指定这些列,例如:

col1="r_reponseTime"
col2="c_filesetSize"

我现在如何通过字符串引用列来实现与上面相同的内容?

raw[,col1] #Returns the whole column
raw[,col2]  #Same as above, returns column
plot(raw[,col1]~raw[,col2]) #draws something

当然不起作用,因为我需要某种“解除歧视”。我不知道在帮助和互联网上搜索什么,很抱歉这个愚蠢的问题。

4 个答案:

答案 0 :(得分:32)

如果您提供了可重现的示例,或者至少显示了raw的列名称以及r_responseTimec_filesetSize包含的内容,那将会很好。这就是说,get是你解除引用的功能所以试试这些:

raw[, get(col1)]
raw[, get(col2)]
plot(raw[, get(col1)] ~ raw[, get(col2)])

答案 1 :(得分:7)

另一种方法是使用match()函数或%in%运算符。

raw[, match(col1, names(raw)),with=FALSE]

答案 2 :(得分:4)

如果您有字符串向量,则可以使用mget

cols = c("r_reponseTime", "c_filesetSize")
raw[, mget(cols)]

答案 3 :(得分:0)

不幸的是,“获取”可能会引起问题! 请参见下面的示例:

m = 100
x1 = sample(c("cat", "dog", "horse"), m, replace=TRUE)
y1 = rnorm(m)
fill1 = sample(c("me", "myself", "dude"), m, replace=TRUE)
df = data.frame("x"=x1, "y"=y1, "fill"=fill1)
dt = data.table(df)

获取不起作用!

y = "y"
dt[ , get(y)]

获取作品!

yCol = "y"
dt[ , get(yCol)]

总是可以工作,但是不漂亮!

eval(parse(text = paste0("values = dt[ ,",  y, "]")))
eval(parse(text = paste0("values = dt[ ,",  yCol, "]")))