首页 > 解决方案 > 使用对 R 中列名的变量引用来提取数据子集

问题描述

我想做以下事情:
如果说我正在处理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

标签: rdataframedata.table

解决方案


我仍然认为这有点重复问题“选择/分配给data.table variables,其名称存储在字符向量中”,但是当我寻找更好的选择时,让我们来解决这个问题。

您可以使用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]”。

[粗体强调是我的]


推荐阅读