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.

¿Fue útil?

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:

  1. Reemplazar setdiff con function(x,y)setdiff(x$id, y$id)
  2. Reemplazar dtl con ids <- 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)
    

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top