子集重复值具有两个不同的状态值

时间:2015-05-08 00:21:40

标签: r subset

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

   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

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

3 个答案:

答案 0 :(得分:2)

如果删除所有重复的行,则多次出现的任何ID都必须具有多个与之关联的状态。因此,如果您的数据框为df

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

或者在magrittr的一个管道中:

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

然后,您可以对数据框进行子集化,以仅选择那些ID。

答案 1 :(得分:2)

library(dplyr)
df %>% 
    group_by(Id) %>% 
    filter("Yes"%in% Status & "No"  %in% Status)

答案 2 :(得分:1)

使用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