首页 > 解决方案 > 合并一个 data.table 和一个列表

问题描述

我想在我的 data.table 中添加一个列表。让我们考虑这个data.table:

dt = data.table(id = 1:3)

lst <- list()
lst[[2]] <- cbind(a=10:12, b=5:7)

dt[-nrow(dt), lst:=lst]

dt
#   id               lst
#1:  1                  
#2:  2 10,11,12, 5, 6, 7
#3:  3    

是否可以“取消列出”第一个,以便 data.table 看起来像这样?

      id  a  b       
1.0:  1                  
2.0:  2 
2.1:  2   10 5
2.2:  2   11 6
2.3:  2   12 7
3.0:  3                  

还有一个速度问题,因为我正在处理的数据包含数十亿行。

标签: rlistdata.table

解决方案


评论中提到的一个选项:

rbindlist(list(dt, 
        rbindlist(lapply(lst, as.data.table), idcol='id')), 
    use.names=TRUE, fill=TRUE)[order(id)]

输出:

   id  a  b
1:  1 NA NA
2:  2 NA NA
3:  2 10  5
4:  2 11  6
5:  2 12  7
6:  3 NA NA

推荐阅读