r - 使用与列同名的对象过滤 data.table 中的行
问题描述
我有一个 dt
带有列名的 data.tablex
和y
. 我还有一个对象y
,我需要使用它来过滤一些行,dt
使用dt$y
. 不幸的是,由于其中一列与对象同名,我无法使其工作。我究竟做错了什么?太感谢了。
library(data.table)
dt <- data.table( x = c(1:4),
y = letters[1:4])
y <- "c"
dt[y == y]
#> x y
#> 1: 1 a
#> 2: 2 b
#> 3: 3 c
#> 4: 4 d
dt[y == (y)]
#> x y
#> 1: 1 a
#> 2: 2 b
#> 3: 3 c
#> 4: 4 d
dt[y == ..y]
#> Error in eval(stub[[3L]], x, enclos): object '..y' not found
eval(quote(y))
#> [1] "c"
dt[y == eval(quote(y))]
#> x y
#> 1: 1 a
#> 2: 2 b
#> 3: 3 c
#> 4: 4 d
由reprex 包于 2021-04-12 创建 (v2.0.0 )
PS:如果在其他地方问过这个问题,我深表歉意。我搜索了一个答案,但我找不到它。
解决方案
你可以使用get()
和env
论点:
dt[y == get('y', env = -2)]
# x y
# 1: 3 c
请注意,这会对您的设置做出某些假设。如果您y
在示例中定义在全局环境中,那么更安全的解决方案(如 Ian Campell 所建议)将是:
dt[y == get('y', env = globalenv())]
推荐阅读
- scala - Play JSON 中有没有办法为非对象(/数组)定义阅读器?
- apache-kafka - 是否可以将 debezium/kafka 配置为从单个主题中的多个表接收消息?
- javascript - ForbiddenError:无效的csrf令牌NodeJS
- lua - Lua罗技鼠标脚本错误必须替换math.pow
- c# - 将 JSON 包反序列化为具有自定义属性名称的类
- python - 从两个目录中的文件导入函数
- asp.net-core - 如何在 ASP.Net 核心中使用 Outlook 邮件 API?
- flutter - Flutter 电话身份验证 FirebaseAuthInvalidCredentialsException
- powershell - Powershell 将 f5 键发送到边缘
- java - 根据调用的方法在 Spring REST API 中应用身份验证过滤器