【发布时间】:2021-10-04 06:43:48
【问题描述】:
我正在尝试获取我的数据子集,其中包含单个列的两个不同值,这些值与使用 data.table 的第二列匹配。
这感觉像是一项相当微不足道的任务,但我在任何地方都找不到这样的例子:
library(data.table)
dat <- data.table(id = c("100", "100", "101", "101", "101", "103", "105", "105"),
V1 = c("A", "B", "A", "B", "C", "B", "A", "B"),
V2 = c(NA, NA, 20, NA, 30, NA, 30, 30))
我想要做的是找到所有给定 id 的 A 和 B 都是 NA 的实例。
我可以很容易地得到其中一个为真的 id:
dat[(V1 == "A" & is.na(V2)) | (V1 == "B" & is.na(V2)), ] # works as expected
# id V1 V2
# 1: 100 A NA
# 2: 100 B NA
# 3: 101 B NA
# 4: 103 B NA
dat[V1 %in% c("A", "B") & is.na(V2), ] # same as above
但是如果我尝试将调用与 & 结合起来,它就不起作用了
dat[(V1 == "A" & is.na(V2)) & (V1 == "B" & is.na(V2)), ] # empty data table
dat[(V1 == "A" & is.na(V2)) && (V1 == "B" & is.na(V2)), ] # empty data table
我认为 data.table 是空的,因为没有 V1 等于 A AND B 的行,但我尝试过的没有任何结果。
这就是我想要摆脱的:
# id V1 V2
# 1: 100 A NA
# 2: 100 B NA
我想我需要在此处以某种方式包含 id 信息,但我不清楚如何添加 by = 不起作用
【问题讨论】:
标签: r data.table filtering data-manipulation