【问题标题】:Binding two data.table with different length绑定两个不同长度的data.table
【发布时间】:2017-12-01 12:53:10
【问题描述】:

我有一个 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”。

【问题讨论】:

  • 它的类是一个data.table。你可以把它想象成一个data.frame。
  • 只是:rbindlist(list(a,b), fill = TRUE)

标签: r list data.table rbind cbind


【解决方案1】:
> 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

【讨论】:

  • 有什么办法可以删除 NA 或用“”代替,以便在导出到 xlsx 文件时看不到它,而不是通过子集和插入“”?
  • @kim1298 df[is.na(df)]
  • @kim1298 您可能希望在编写表格时指定为 NA 填写的内容。这将是一个更好的解决方案,因为它不会改变变量的类型。例如,write.csv(df.name, file = "output.csv", na = "")
  • 列名重复时不起作用
【解决方案2】:

使用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

【讨论】:

  • 有什么办法可以删除 NA 或用“”代替,以便在导出到 xlsx 文件时看不到它,而不是通过子集和插入“”?
  • apply(plyr::ldply(l1,data.table),2,function(x)ifelse(is.na(x),"",x))
猜你喜欢
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-09
  • 2017-10-15
  • 2012-07-29
  • 2016-02-23
  • 2013-04-02
相关资源
最近更新 更多