使用组织为的数据

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

我需要提取包含DTL [[n + 1]]中的行中的日期列表,其中不存在于dtl [[n]]中的 id 。我认为这将是

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)
.

编辑:使用新的预期输出,我仍然如上所述使用mapply,但是以下两个更改之一:

  1. setdiff 替换function(x,y)setdiff(x$id, y$id)
  2. dtl 替换ids <- 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