使用对R中列名称的变量引用提取数据子集

时间:2018-07-25 22:14:35

标签: r dataframe data.table

我要执行以下操作:
如果说我正在使用iris类的data.frame数据,并且将列名存储到变量col <- "Species"中,我想提取以下子集:

iris[iris$Petal.Width == 0.2, c("Sepal.Width", "Petal.Width", col)]

代码可以正常工作并返回预期的表。但是,如果我将数据转换为data.table并运行同一行代码,则只会得到返回的列名,而不是子集。像这样:

iris[iris$Petal.Width == 0.2, c("Sepal.Width", "Petal.Width", col)]
[1] "Sepal.Width" "Petal.Width" "Species"  

如何更改表示法,以便从data.table获得相同的结果?

1 个答案:

答案 0 :(得分:2)

我仍然认为这与问题"Select / assign to data.table variables which names are stored in a character vector"有点类似,但是当我寻找更合适的方法时,让我们解决这个问题。

您可以使用with = F

col <- "Species"
as.data.table(iris)[Petal.Width == 0.2, c("Sepal.Width", "Petal.Width", col), with = F]
#Sepal.Width Petal.Width Species
#1:         3.5         0.2  setosa
#2:         3.0         0.2  setosa
#3:         3.2         0.2  setosa
#4:         3.1         0.2  setosa
#5:         3.6         0.2  setosa
#6:         3.4         0.2  setosa
#...

相同
as.data.table(iris)[Petal.Width == 0.2, .SD, .SDcols = c("Sepal.Width", "Petal.Width", col)]

摘自?data.table文档

  

with:默认情况下,“ with = TRUE”和“ j”在框架中求值             的“ x”;列名称可用作变量。

     

当“ with = FALSE”,“ j”是列名的字符向量时,             要选择的列位置或形式的数值向量             ‘startcol:endcol’,返回的值始终是             “ data.table”。 “ with = FALSE”通常在“ data.table”中             动态选择列。请注意,“ x [,cols,with = FALSE]”             等同于“ x [,。SD,.SDcols = cols]”。

[大胆强调是我的]