Для полноты картины приведены также некоторые решения data.table :
library(data.table)
setDT(df)[, if (uniqueN(Type) > 1) .SD, by = .(ID, Date)]
ID Date Type
1: 1 2016-06-25 IN
2: 1 2016-06-25 OUT
3: 2 2016-07-03 IN
4: 2 2016-07-03 OUT
Внутри каждого ID
, Date
группируются только те подмножества df
, для которых существует более одного отдельного Type
.
Это также можно записать как:
setDT(df)[, .SD[uniqueN(Type) > 1], by = .(ID, Date)]
Существует также вариант, который находит комбинации ID
и Date
, которые удовлетворяют требованию и подмножествам df
, путем объединения:
setDT(df)[df[, uniqueN(Type), by = .(ID, Date)][V1 > 1], on = .(ID, Date), .SD]
ID Type Date
1: 1 IN 2016-06-25
2: 1 OUT 2016-06-25
3: 2 IN 2016-07-03
4: 2 OUT 2016-07-03
данных
df <-readr::read_delim(
"ID Type Date
1 OUT 2016-06-18
1 OUT 2016-06-18
1 OUT 2016-06-18
1 IN 2016-06-25
1 OUT 2016-06-25
2 IN 2016-07-03
2 OUT 2016-07-03",
delim = " ", trim_ws = TRUE)