質問

として整理されたデータを使用する

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つがあります。

  1. setdifffunction(x,y)setdiff(x$id, y$id) に置き換えます。
  2. dtlids <- lapply(dtl, "[", "id") に置き換えます。

    edit2::あなたが提供したコードと一致しない平らな英語の説明を追加することによって、予想される出力を再度変更しました...私はあなたがそうです今これを探しています:

    mapply(function(x,y)y[setdiff(y$id, x$id), ],
           head(dtl, -1), tail(dtl, -1), SIMPLIFY = FALSE)
    
    .

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top