setdiff consecutivo na lista de tabela de dados
-
11-12-2019 - |
Pergunta
Usando dados organizados como
dtl <- replicate(10,data.table(id=sample(letters,10),val=sample(10)), simplify=F)
lapply(dtl, function(x){setkey(x,'id')})
Preciso extrair uma lista de tabelas de dados que contêm as linhas em dtl[[n+1]]] com eu ia não presente em dtl[[n]].Presumo que seria algo como
dtl2 <- list(setdiff(dtl[[1]][['id']],dtl[[2]][['id']]),setdiff(dtl[[2]][['id']],dtl[[3]][['id']]...)
Observe que, embora o setdiff deva levar apenas o eu ia coluna em consideração, espero que o resultado contenha todas as colunas de cada tabela de dados.
Solução
Acho que isso vai servir para você:
mapply(setdiff, head(dtl, -1), tail(dtl, -1), SIMPLIFY = FALSE)
Editar:com sua nova saída esperada, eu ainda usaria mapply
como acima, mas com uma das duas alterações a seguir:
- substituir
setdiff
comfunction(x,y)setdiff(x$id, y$id)
- substituir
dtl
comids <- lapply(dtl, "[", "id")
Editar2::você alterou a saída esperada novamente adicionando uma descrição simples em inglês que não corresponde ao código fornecido ...EU pensar agora você está procurando por isso:
mapply(function(x,y)y[setdiff(y$id, x$id), ],
head(dtl, -1), tail(dtl, -1), SIMPLIFY = FALSE)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow