31

raw是 adata.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

4 回答 4

34

如果您提供了一个可重现的示例,或者至少显示列名raw是什么r_responseTime以及c_filesetSize包含什么内容,那就太好了。话虽这么说,get是您取消引用的功能,所以试试这些:

raw[, get(col1)]
raw[, get(col2)]
plot(raw[, get(col1)] ~ raw[, get(col2)])
于 2012-03-25T21:18:08.143 回答
10

一种现代方法是使用..

raw[ , ..col1]

..“查找级别”以查找col1


较旧的、不太受欢迎的替代方法是使用match()函数或%in%运算符。

raw[, match(col1, names(raw)),with=FALSE]
于 2012-03-25T22:29:31.917 回答
6

如果你有一个字符串向量,你可以使用mget

cols = c("r_reponseTime", "c_filesetSize")
raw[, mget(cols)]
于 2017-02-07T23:05:47.233 回答
0

不幸的是,“get”可能有问题!请参见下面的示例:

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, "]")))
于 2019-02-28T15:03:42.623 回答