r - 使用与列同名的对象过滤 data.table 中的行

标签 r data.table

我有一个 data.table dt,其列名称为 xy。我还需要使用对象 y 来使用 dt$y 中的值过滤 dt 中的某些行。不幸的是,由于其中一列与对象同名,我无法使其工作。我究竟做错了什么?非常感谢。

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 package 于 2021 年 4 月 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())]

关于r - 使用与列同名的对象过滤 data.table 中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67059273/

相关文章:

r - 如何使用场景向 scatter3D Plotly 绘图添加注释?

r - 通过按 R 中的值过滤列来应用 glm()

r - 如何在 `:=` 下的 data.table 中分配动态列名称?

r - 过滤 data.table 的日期问题 - 适用于固定日期但不适用于变量

r - 计算数据框子集中的比例

r - 计算均值,包括除一个以外的所有因子水平

r - 使用 data.table 和 R.utils 获取 gzip 压缩文件的一致 md5 校验和

r - data.table 中的大整数。 1.9.2 中的分组结果与 1.8.10 中的分组结果不同

r - 如何有效地确定每行中的变量值与R中data.table中相同变量后续行值之间的最大差异

rbindlist : NA into date-time column