Вопрос

Использование данных, организованных как

dtl <- replicate(10,data.table(id=sample(letters,10),val=sample(10)), simplify=F)
lapply(dtl, function(x){setkey(x,'id')})
.

Мне нужно извлечь список данных, которые содержат строки в DTL [[N + 1]]] с помощью ID , не присутствующей в DTL [[N]].Я предполагаю, что это будет что-то вроде

dtl2 <- list(setdiff(dtl[[1]][['id']],dtl[[2]][['id']]),setdiff(dtl[[2]][['id']],dtl[[3]][['id']]...)
.

Пожалуйста, обратите внимание, что, в то время как SetDiff учитывает только столбец ID , я ожидаю, что результат будет содержать все столбцы из каждого DataTable.

Это было полезно?

Решение

Я думаю, что это сделает это для вас:

mapply(setdiff, head(dtl, -1), tail(dtl, -1), SIMPLIFY = FALSE)
.

EDIT : с вашим новым ожидаемым выходом я все равно использовал mapply, как указано выше, но с одним из следующих двух изменений:

  1. Заменить setdiff с function(x,y)setdiff(x$id, y$id)
  2. Заменить 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)
    
    .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top