使用两个不同的状态值子集重复值

Subset duplicate values with two different status values

我有一些重复的 ID 值,还有另一列 Status (yes/No) ,我想提取具有两个不同状态值的重复值的子集。例如,如果我的数据集如下

   Id        Status
   23984     Yes
   94949     No
   89685     No
   33232     Yes
   33232     Yes
   57943     No
   75633     Yes
   75633     No

在这种情况下,ID 75633 是重复的并且有两个不同的状态(是和否)所以我的最终数据集应该只包含这样的 ID 而不是 33232。

   Id        Status
   75633     Yes
   75633     No

我知道如何做一个子集,但不知道如何包括这个标准需要一些帮助。

如果您删除所有重复的行,那么多次出现的任何 ID 都必须有多个与其相关联的状态。所以如果你的数据框是 df:

tb <- table(unique(df)$Id)
names(tb[tb>1])

或者在一个带有 magrittr 的管道中:

library(magrittr)
df %>% unique %$% Id %>% table %>% subset(. > 1) %>% names

然后您可以将数据框子集化为 select 只有那些 ID。

这个用 tapply 怎么样?

ind <- which(tapply(df$Status, df$Id, function(x) "Yes" %in% x & "No" %in% x))
df[df$Id == names(ind),]
     Id Status
7 75633    Yes
8 75633     No
library(dplyr)
df %>% 
    group_by(Id) %>% 
    filter("Yes"%in% Status & "No"  %in% Status)