DataTable Listで連続したSetDiff.
-
11-12-2019 - |
質問
として整理されたデータを使用する
dtl <- replicate(10,data.table(id=sample(letters,10),val=sample(10)), simplify=F)
lapply(dtl, function(x){setkey(x,'id')})
.
DTL [[N]]に存在しない ID でDTL [[N + 1]]の行を含むデータテーブルのリストを抽出する必要があります。のようなものだと思います
.
dtl2 <- list(setdiff(dtl[[1]][['id']],dtl[[2]][['id']]),setdiff(dtl[[2]][['id']],dtl[[3]][['id']]...)
SetDiffは id 列を考慮しているだけであれば、結果が各DataTableからすべての列を含めることを期待しています。
解決
これはあなたのためにそれをすると思います:
mapply(setdiff, head(dtl, -1), tail(dtl, -1), SIMPLIFY = FALSE)
.
edit :あなたの新しい予想出力を使って、私はまだ上記のようにmapply
を使用しますが、次の2つの変更のうちの1つがあります。
-
setdiff
をfunction(x,y)setdiff(x$id, y$id)
に置き換えます。 -
dtl
をids <- lapply(dtl, "[", "id")
に置き換えます。edit2::あなたが提供したコードと一致しない平らな英語の説明を追加することによって、予想される出力を再度変更しました...私はあなたがそうです今これを探しています:
.mapply(function(x,y)y[setdiff(y$id, x$id), ], head(dtl, -1), tail(dtl, -1), SIMPLIFY = FALSE)
所属していません StackOverflow