我正准备编写一个R代码,该代码比较按其ID分组的两列。我的想法是过滤该列,以便它仅显示已参加初始会议和审查会议的ID。
这是我的数据框:
ID Initial Review Type
P40 Yes Meeting1
P40 Yes Meeting2
P42 Yes Meeting1
P42 No Meeting2
P43 Yes Meeting1
P43 Yes Meeting2
P44 Yes Meeting1
P44 No Meeting2
这是我要实现的目标:
ID Initial Review Type
P40 Yes Meeting1
P40 Yes Meeting2
P43 Yes Meeting1
P43 Yes Meeting2
尝试使用OR和AND逻辑运算符。 OR给出错误的结果,而AND给出空的数据帧。
tt %>% group_by(ID) %>% filter(Initial == "Yes" & Review == "Yes")
答案 0 :(得分:0)
df %>% group_by(ID) %>% filter(any(Initial == "Yes") && any(Review == "Yes"))
说明:Initial == "Yes"
是两个元素的向量,一个给定ID的每一行。例如,对于P40,它是c(TRUE, FALSE)
。与Review == "Yes"
相同,除了此处的向量为c(FALSE, TRUE)
。现在,c(TRUE, FALSE) & c(FALSE, TRUE)
是c(FALSE, FALSE)
,这就是为什么您得到空df的原因。
在我的解决方案中,您得到一个值。对于P40,any(Initial == "Yes")
为TRUE
,并且any(Review == "Yes")
也为TRUE,而TRUE && TRUE
为TRUE
。现在,因为我们需要一个长度为2的向量,所以R会自动展开向量,并用TRUE
填充它,这就是为什么您同时获得P40
的两行的原因。