2015-05-08 3 views
2

У меня есть значения Id, некоторые из них являются дубликатами, есть еще один столбец Status (yes/No), я хочу извлечь подмножество повторяющихся значений, которые имеют два разных значения статуса. Например, если мой набор данных, как показано нижеПодмножество с двумя значениями состояния

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

В этом случае, Id 75633 является дубликатом и имеет два различных состояния (Да & Нет), чтобы мой последний набор данных должен содержать только такие идентификаторы, а не 33232.

Id  Status 
    75633  Yes 
    75633  No 

Я знаю, как сделать подмножество, но не знаю, как включить этот критерий, нужна какая-то помощь.

ответ

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

был совершенен. Точно, что я искал +10 человек –

+0

Glat it work. – ExperimenteR

2

Если вы удалите все повторяющиеся строки, чем любой идентификатор, который происходит более одного раза, должен иметь несколько статусов, связанных с ним. Так что, если ваш фрейм данных df:

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

Или в одном трубопроводе с magrittr:

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

Тогда вы можете подмножество фрейма данных, чтобы выбрать только те идентификаторы.

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 
Смежные вопросы