2015-06-11 3 views
9

У меня есть data.frame с двумя переменными id.x и id.y, комбинация которых однозначно идентифицирует каждую строку, но повторяется много раз в наборе данных.Комбинат group_by и отдельный

Я хотел бы использовать dplyr к group_byid.x таким образом, что каждая id.x сочетается с отчетливым id.y.

редактировать отредактированный пример, чтобы выделить отличающуюся количество uniqueid.x. и id.y

Пример:

id.x id.y 
    a o 
    a p 
    a q 
    c o 
    c p 
    c q 

вернуться бы:

id.x id.y 
    a o 
    c q 

dput, например:

structure(list(id.x = structure(c(1L, 1L, 1L, 2L, 2L, 2L), .Label = c("a", 
"c"), class = "factor"), id.y = structure(c(1L, 2L, 3L, 1L, 2L, 
3L), .Label = c("o", "p", "q"), class = "factor")), .Names = c("id.x", 
"id.y"), row.names = c(NA, -6L), class = "data.frame") 

редактировать Если мой желаемый результат может быть достигнут без использования group_by или distinct, что это тоже хорошо! Я также использую data.table, и решение data.table будет в порядке.

+0

Как вы хотите, хотите 'спички', чтобы определить? Существует не «отдельный» вызов, который бы создал желаемый результат. – cdeterman

+0

Я хотел бы, чтобы совпадения определялись таким образом, чтобы в окончательном 'data.frame' на' length (максимальная длина 'unique'' id.x' и 'id.y' находилась максимальная сумма (уникальная (id.x)) == длина (уникальный (id.y)) == nrow (data.frame) '. Это имеет смысл? – bjoseph

+1

Не уверен, но как насчет 'library (data.table); setDT (df) [, lapply (.SD, unique)] '? –

ответ

1

Использование dplyr

df %>% filter(dense_rank(id.x)==dense_rank(id.y)) 

который возвращает

id.x id.y 
1 a o 
2 c p