如何将两个含data.table的列表按对应元素rbind合并为新列表
解决列表对应元素的rbind合并问题
刚好碰到过类似的场景,你需要的是对两个列表的对应位置元素逐一执行rbind合并,而不是把两个列表拼接成一个大列表再处理。下面给你两种简单可行的方案:
方案1:使用mapply(灵活可控)
mapply是多变量版本的lapply,可以同时遍历多个列表的对应元素并应用函数。记得加上SIMPLIFY=FALSE参数,避免返回结果被自动简化成其他结构:
library(data.table) # 你的原始数据 l1 <- list(data.table(id=1:5, group=1), data.table(id=1:5, group=1)) l2 <- list(data.table(id=1:5, group=2), data.table(id=1:5, group=2)) # 执行对应元素的rbind合并 result <- mapply(function(x, y) rbind(x, y), l1, l2, SIMPLIFY = FALSE)
方案2:使用Map(更简洁)
Map其实是mapply的简化封装,默认就会返回列表结构,代码更短:
result <- Map(rbind, l1, l2)
为什么你之前的方法不对?
你提到的lapply(c(l1,l2), rbind)会先把l1和l2拼接成一个包含4个元素的大列表,然后lapply会对每个单独的元素执行rbind——相当于每个元素自己和自己合并(结果还是原元素),所以最后得到4个元素的列表,这和你的预期不符。
现在运行上面的代码,result就是你想要的包含2个元素的列表,每个元素都是对应位置l1和l2元素rbind后的结果~
内容的提问来源于stack exchange,提问作者bumblebee
相关产品推荐
相关产品推荐

