使用两个不同的状态值子集重复值
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)
我有一些重复的 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)