R按ID比较两列

时间:2019-07-15 08:55:29

标签: r dplyr tidyverse

我正准备编写一个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")

1 个答案:

答案 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 && TRUETRUE。现在,因为我们需要一个长度为2的向量,所以R会自动展开向量,并用TRUE填充它,这就是为什么您同时获得P40的两行的原因。