Question

Utiliser des données organisées comme

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

Je dois extraire une liste de tables de données contenant les lignes de dtl[[n+1]]] avec identifiant non présent dans dtl[[n]].Je suppose que ce serait quelque chose comme

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

Veuillez noter que, même si setdiff ne doit prendre que le identifiant colonne en compte, je m'attends à ce que le résultat contienne toutes les colonnes de chaque table de données.

Était-ce utile?

La solution

Je pense que ceci le fera pour vous :

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

Modifier:avec votre nouveau résultat attendu, j'utiliserais toujours mapply comme ci-dessus, mais avec l'une des deux modifications suivantes :

  1. remplacer setdiff avec function(x,y)setdiff(x$id, y$id)
  2. remplacer dtl avec ids <- lapply(dtl, "[", "id")

Edit2 ::vous avez à nouveau modifié le résultat attendu en ajoutant une description en anglais simple qui ne correspond pas au code que vous aviez fourni...je pense vous cherchez maintenant ceci :

mapply(function(x,y)y[setdiff(y$id, x$id), ],
       head(dtl, -1), tail(dtl, -1), SIMPLIFY = FALSE)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top