我有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
我知道如何做一个子集但不知道如何包含这个标准需要一些帮助。
答案 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