【问题标题】:R compare two columns group by IDR按ID比较两列分组
【发布时间】:2019-07-15 08:55:29
【问题描述】:

我正在尝试编写一个 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 给了我错误的结果,我得到了空数据框。

tt %>% group_by(ID) %>% filter(Initial == "Yes" & Review == "Yes")

【问题讨论】:

  • 请与dput->help分享数据。

标签: r dplyr tidyverse


【解决方案1】:
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")TRUEany(Review == "Yes") 也是 TRUE,TRUE && TRUETRUE。现在因为我们需要一个长度为 2 的向量,R 会自动扩展向量,用TRUE 填充它,这就是为什么你会得到P40 的两行。

【讨论】:

  • 答应我你以后会使用dput ;-)
  • @一月,好的,我保证。 P40 的另一行在初始列中有“否”但您不想显示呢?你想要我可以编辑数据框来告诉你我想要什么。
  • 啊,这完全是另一个问题,您的数据中没有示例。我是否正确理解您确实想向用户显示P40,即使在另一行中它说“不”?然后在上述过滤器之后,您只需删除第一列中具有“否”的行。要么这样,要么你需要写另一个问题,详细说明你想要什么。
  • 干杯@一月
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
相关资源
最近更新 更多