SetDiff consecutivo nell'elenco Dataabili
-
11-12-2019 - |
Domanda
Utilizzo dei dati organizzati come
dtl <- replicate(10,data.table(id=sample(letters,10),val=sample(10)), simplify=F)
lapply(dtl, function(x){setkey(x,'id')})
.
Devo estrarre un elenco di datababili che contengono le righe in DTL [[N + 1]]] con ID non presente in DTL [[N]].Presumo che sarebbe qualcosa come
.
dtl2 <- list(setdiff(dtl[[1]][['id']],dtl[[2]][['id']]),setdiff(dtl[[2]][['id']],dtl[[3]][['id']]...)
Si prega di notare che, mentre il Setdiff deve prendere in considerazione la colonna ID , mi aspetto che il risultato contenga tutte le colonne da ciascun Dataatable.
Soluzione
Penso che questo lo farà per te:
mapply(setdiff, head(dtl, -1), tail(dtl, -1), SIMPLIFY = FALSE)
.
Modifica : Con la nuova uscita prevista, utilizzerei ancora mapply
come sopra, ma con una delle seguenti due modifiche:
- .
- Sostituisci
setdiff
confunction(x,y)setdiff(x$id, y$id)
- Sostituisci
dtl
conids <- lapply(dtl, "[", "id")
Edit2: : hai cambiato nuovamente l'uscita prevista aggiungendo una descrizione in inglese semplice che non corrisponde al codice che hai fornito ... I Think seiora in cerca di questo:
.mapply(function(x,y)y[setdiff(y$id, x$id), ], head(dtl, -1), tail(dtl, -1), SIMPLIFY = FALSE)