r - 当列名在别处预定义时,R data.table 在条件子集上苦苦挣扎
问题描述
假设我有一个数据表
library(data.table)
DT <- data.table(x=c(1,1,0,0),y=c(0,1,2,3))
column_name <- "x"
x y
1: 1 0
2: 1 1
3: 0 2
4: 0 3
我想访问 x = 1 的所有行,但使用 column_name。
所需的输出应如下所示:
DT[x==1,]
x y
1: 1 0
2: 1 1
但在输入中x
替换为。column_name
请注意,此问题与Data.table R 中的 Select subset of columns相似但不完全相同,并且那里的解决方案(使用 with=FALSE)在这里不起作用。
这是我尝试过的所有事情。它们都不起作用。
DT[column_name ==1,]
DT[.column_name ==1,]
DT[.(column_name) ==1,]
DT[..column_name ==1,]
DT[."column_name" ==1,]
DT[,column_name ==1,]
DT[,column_name ==1,with=TRUE]
DT[,column_name ==1,with=FALSE]
DT[,.column_name ==1,with=TRUE]
DT[,.column_name ==1,with=FALSE]
DT[,..column_name ==1,with=TRUE]
DT[,..column_name ==1,with=FALSE]
DT[,."column_name" ==1,with=TRUE]
DT[,.column_name ==1,with=FALSE]
DT[column_name ==1,with=TRUE]
DT[column_name ==1,with=FALSE]
DT[[column_name==1,]]
subset(DT,column_name==1)
我也options(datatable.WhenJisSymbolThenCallingScope=TRUE)
启用了
显然我缺少某种词汇技巧。我花了几个小时浏览小插曲和 SO 问题,但无济于事。
解决方案
我可以想象这对你来说非常令人沮丧。我为您在发布之前尝试的事情数量鼓掌。这是一种方法:
DT[get(column_name) == 1,]
x y
1: 1 0
2: 1 1
如果需要使用column_name
in J
,可以使用get(..column_name)
:
DT[,get(..column_name)]
[1] 1 1 0 0
..
指示在父环境中进行评估。
I
在or中使用字符串的另一种方法J
是 with eval(as.name(column_name))
:
DT[eval(as.name(column_name)) == 1]
x y
1: 1 0
2: 1 1
DT[,eval(as.name(column_name))]
[1] 1 1 0 0
推荐阅读
- python-3.x - 使用 cv2 或 Pillow 将零和一的二进制 numpy 数组写入文件
- sql - R - 使用 RODBC 更新 SQL Server 上的数据
- c# - x64 调用约定上的 CLI calli
- c# - 使用 ImageMagick 压缩 azure blob 中的图像
- python - 如何根据 selenium-webdriver 和 Python 提供的 HTML 单击元素
- pandas - Snakemake 和 pandas 语法
- go - golang 中的 math.Pow 对这个论坛有好处吗?
- sql-server - 具有多个数据的 Sql Server 中的列到行
- php - 通过 web-push-php 发送通知后,客户端上的有效负载为空
- scala - Spark数据框:派生列的连接方法