1

使用组织为的数据

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

我需要提取包含 dtl[[n+1]]] 中行的数据表列表,其中id不存在于 dtl[[n]] 中。我想它会像

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

请注意,虽然 setdiff 应该只考虑id列,但我希望结果包含每个数据表中的所有列。

4

1 回答 1

3

我认为这会为你做到:

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

编辑:使用您的新预期输出,我仍然会mapply像上面那样使用,但有以下两个更改之一:

  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)
于 2012-10-01T00:52:25.310 回答