r - 使用对 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
?
解决方案
我仍然认为这有点重复问题“选择/分配给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]”。
[粗体强调是我的]
推荐阅读
- java - 使用 https 时检票不正确的可收藏页面 url
- reactjs - 反应和 JavaScript
- logfile - Psychtoolbox - 将信息写入日志文件
- java - 我如何处理我的应用程序要求拨打和管理电话?
- go - 处理动态子域
- android - 构建错误:任务':app:transformNativeLibsWithStripDebugSymbolForDebug的执行失败
- jquery - 如何从json编码数组中减去值然后传递到表中
- javascript - Dc.js:条形图,条形重叠
- animation - GNU绘图:';' 预期的 gif 终端
- windows - 无法在 Windows 10 上运行 RabbitMQ