首页 > 解决方案 > R - 如果满足其他列中的特定值,则删除所有后续 ID 行

问题描述

我有一个长格式的数据框,每个 id 包含多个条目。我还有一个条件列,它可以是“应用条件”、“控制条件”或 NA。每个 id 至少有一个“应用条件”或“控制条件”条目,但通常其余的都是 NA。现在我需要过滤掉所有属于 app 条件的 id 行。所以我需要类似的东西:如果条件 == id 5 的“应用条件”,删除 id 5 的所有行。

我的 df 看起来像这样:

ID 健康)状况 ……
一个 应用条件
一个 不适用
一个 不适用
控制条件
不适用
控制条件
C 不适用
C 应用条件
D 不适用
D 控制条件

我想保留所有至少有一个“控制条件”条目的 ID。所以基本上是这样的:

ID 健康)状况 ……
控制条件
不适用
控制条件
D 不适用
D 控制条件

到目前为止,我的方法是使用 dplyr

df <- df %>% 
   group_by(id) %>%
   filter(any(condition != "App condition")|is.na(condition))

但这也仍然返回属于应用条件的 ID,只是删除了这些行,以便相同 ID 的 NA 行仍然保留在数据框中。

有人可以帮忙吗?

非常感谢!

标签: rfilterdplyrlong-integer

解决方案


我做过类似的事情

df = as.data.frame(cbind(c('a','a','a','b','b','b','c','c','d','d'),c('AC',NA,NA,'CC',NA,'CC',NA,'AC',NA,'CC')))

df = df[-which(df$V1%in%df[which(df$V2=='AC'),'V1']),]

后来看起来像这样

   V1   V2
4   b   CC
5   b <NA>
6   b   CC
9   d <NA>
10  d   CC

在您的情况下,只需用 ID 替换 V1 并用条件替换 V2 :)

希望它有所帮助


推荐阅读