我想执行以下操作:
如果说我正在处理iris
属于类的数据data.frame
并且我将列名存储到变量中,col <- "Species"
并且我想提取以下子集:
iris[iris$Petal.Width == 0.2, c("Sepal.Width", "Petal.Width", col)]
该代码工作并按预期返回一个表。但是,如果我将数据转换为 adata.table
并运行同一行代码,我将只返回列名而不是子集。像这样:
iris[iris$Petal.Width == 0.2, c("Sepal.Width", "Petal.Width", col)]
[1] "Sepal.Width" "Petal.Width" "Species"
我将如何更改符号以从 a 获得相同的结果data.table
?
我仍然认为这有点类似于问题“选择/分配给 data.table 变量,这些变量名称存储在字符向量中”,但在我寻找更合适的时候,让我们解决这个问题。
您可以使用 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]”。
[大胆的强调是我的]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句