1

我需要保存在列表中的 ffdf 数据帧的外连接。已经检查过这个,但它指的是不同的问题。RAM 对象的示例代码:

x1 = data.frame(name='a1', Ai=2, Ac=1, Bi=1)
x2 = data.frame(name='a2', Ai=1, Bi=3, Bc=1, Ci=1)
x3 = data.frame(name='a3', Ai=3, Ac=2, Bi=2, Ci=3, Cc=1, Di=2, Dc=2)
x4 = data.frame(name='a4', Ai=3, Bi=2, Ci=1, Fi=2)
dl = list(x1,x2,x3,x4)
mergedDF = Reduce(function(...) merge(..., all=T), dl)
mergedDF[is.na(merged.data.frame)] = 0

所需的结果如下所示:

mergedDF
  name Ai Bi Ci Ac Bc Cc Di Dc Fi
1   a1  2  1  0  1  0  0  0  0  0
2   a2  1  3  1  0  1  0  0  0  0
3   a3  3  2  3  2  0  1  2  2  0
4   a4  3  2  1  0  0  0  0  0  2

不过,只要我将数据帧转换为 ffdf,我就会收到错误消息

Error in merge.ffdf(..., all = T) : merge.ffdf only allows inner joins

任何已知的解决方法?提前谢谢了。

4

1 回答 1

1

当它们具有不同的列集时,这篇文章帮助我按行组合两个数据帧(rbind) 。所以用你的做类似的事情:

   install.packages('plyr')
   require(plyr)
   answer <- Reduce(rbind.fill,dl)
   answer[is.na(answer)] <- 0
   answer

  name Ai Ac Bi Bc Ci Cc Di Dc Fi
1   a1  2  1  1  0  0  0  0  0  0
2   a2  1  0  3  1  1  0  0  0  0
3   a3  3  2  2  0  3  1  2  2  0
4   a4  3  0  2  0  1  0  0  0  2

顺便说一句,很好的想法Reduce,这是一个极少(至少对我而言)很少使用的漂亮小功能。

于 2014-03-03T22:22:19.267 回答