在DataTable列表中的连续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 + 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
,但是以下两个更改之一:
- 用
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