绑定两个不同长度的data.table

时间:2017-06-28 08:45:27

标签: r list data.table rbind cbind

我有一个像

这样的结构的data.table
library(data.table) #load package
a <- as.data.table(matrix(1,10,10))
b <- as.data.table(matrix(2,2,2))

如您所见,它们有不同的维度。 我想把这两个data.table放在一起。 结果应该是, 前十行/前十列是“a” 第11和第12行/第1和第2列是“b”

我需要这个的原因是因为我有一个数据集(a)和一个脚注(b)。 我想合并它并将其导出为xlsx文件。因此,在数据集下面是脚注。

我尝试通过rbind cbind做这个但是这要求我匹配长度,如果我这样做,“b”每次重复5次以使长度与“a”匹配。

2 个答案:

答案 0 :(得分:2)

> y <- as.data.table(matrix(1,10,10))

> u <- as.data.table(matrix(2,2,2))

> merge(y, u, all = TRUE)

    V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
 1:  1  1  1  1  1  1  1  1  1   1
 2:  1  1  1  1  1  1  1  1  1   1
 3:  1  1  1  1  1  1  1  1  1   1
 4:  1  1  1  1  1  1  1  1  1   1
 5:  1  1  1  1  1  1  1  1  1   1
 6:  1  1  1  1  1  1  1  1  1   1
 7:  1  1  1  1  1  1  1  1  1   1
 8:  1  1  1  1  1  1  1  1  1   1
 9:  1  1  1  1  1  1  1  1  1   1
10:  1  1  1  1  1  1  1  1  1   1
11:  2  2 NA NA NA NA NA NA NA  NA
12:  2  2 NA NA NA NA NA NA NA  NA

答案 1 :(得分:0)

使用plyr包:

library(plyr)
l1<-list(a,b)
ldply(l1,data.table)

导致:

   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1   1  1  1  1  1  1  1  1  1   1
2   1  1  1  1  1  1  1  1  1   1
3   1  1  1  1  1  1  1  1  1   1
4   1  1  1  1  1  1  1  1  1   1
5   1  1  1  1  1  1  1  1  1   1
6   1  1  1  1  1  1  1  1  1   1
7   1  1  1  1  1  1  1  1  1   1
8   1  1  1  1  1  1  1  1  1   1
9   1  1  1  1  1  1  1  1  1   1
10  1  1  1  1  1  1  1  1  1   1
11  2  2 NA NA NA NA NA NA NA  NA
12  2  2 NA NA NA NA NA NA NA  NA