我要执行以下操作:
如果说我正在使用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
获得相同的结果?
答案 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]”。
[大胆强调是我的]