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.

È stato utile?

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:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top