Последовательный SetDiff в списке DataTable
-
11-12-2019 - |
Вопрос
Использование данных, организованных как
dtl <- replicate(10,data.table(id=sample(letters,10),val=sample(10)), simplify=F)
lapply(dtl, function(x){setkey(x,'id')})
.
Мне нужно извлечь список данных, которые содержат строки в DTL [[N + 1]]] с помощью
.
dtl2 <- list(setdiff(dtl[[1]][['id']],dtl[[2]][['id']]),setdiff(dtl[[2]][['id']],dtl[[3]][['id']]...)
Пожалуйста, обратите внимание, что, в то время как SetDiff учитывает только столбец
Решение
Я думаю, что это сделает это для вас:
mapply(setdiff, head(dtl, -1), tail(dtl, -1), SIMPLIFY = FALSE)
.
mapply
, как указано выше, но с одним из следующих двух изменений:
- Заменить
setdiff
сfunction(x,y)setdiff(x$id, y$id)
- Заменить
dtl
сids <- lapply(dtl, "[", "id")
EDIT2: : вы снова изменили ожидаемый выход, добавив простое описание английского языка, которое не соответствует требованию, который вы предоставили ... I Думаю выТеперь ищу это:
.mapply(function(x,y)y[setdiff(y$id, x$id), ], head(dtl, -1), tail(dtl, -1), SIMPLIFY = FALSE)