SetDiff consecutivo en la lista DataTable
-
11-12-2019 - |
Pregunta
usando datos organizados como
dtl <- replicate(10,data.table(id=sample(letters,10),val=sample(10)), simplify=F)
lapply(dtl, function(x){setkey(x,'id')})
Necesito extraer una lista de datos de datos que contienen las filas en DTL [[N + 1]]] con id no presente en DTL [[N]].Supongo que sería algo así como
dtl2 <- list(setdiff(dtl[[1]][['id']],dtl[[2]][['id']]),setdiff(dtl[[2]][['id']],dtl[[3]][['id']]...)
Observe que, si bien el SetDiff solo debe tener en cuenta la columna de ID , espero que el resultado contenga todas las columnas de cada DataTable.
Solución
Creo que esto lo hará por usted:
mapply(setdiff, head(dtl, -1), tail(dtl, -1), SIMPLIFY = FALSE)
Editar : Con su nueva salida esperada, todavía usaría mapply
como arriba, pero con uno de los dos cambios siguientes:
- Reemplazar
setdiff
confunction(x,y)setdiff(x$id, y$id)
- Reemplazar
dtl
conids <- lapply(dtl, "[", "id")
Edit2: : ha cambiado nuevamente su salida esperada agregando una descripción en inglés simple que no coincide con el código que ha proporcionado ... I Piense usted esAhora buscando esto:
mapply(function(x,y)y[setdiff(y$id, x$id), ], head(dtl, -1), tail(dtl, -1), SIMPLIFY = FALSE)