【问题标题】:Merging ffdf dataframes in R在 R 中合并 ffdf 数据帧
【发布时间】:2014-04-04 21:59:27
【问题描述】:

我需要保存在列表中的 ffdf 数据帧的外连接。已检查this,但它指的是不同的问题。 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

任何已知的解决方法?非常感谢。

【问题讨论】:

  • 如果我正确理解您的问题。 ffbase 的开发版本包含一个名为ffdfrbind.fill 的函数(类似于rbind.fill)。 library(devtools); install_github("edwindj/ffbase", subdir="pkg") 将安装该开发版本。通常 ffdfrbind.fill(x1, x2, x3, x4) 会让你到达那里。
  • rbind.fill 功能确实是需要的。不幸的是,当我尝试install_github("edwindj/ffbase", subdir="pkg") 时出现此错误:ERROR: compilation failed for package 'ffbase'
  • 我相信你在 windows 上工作。如果你想像 install_github 一样从源代码安装包,你需要安装 Rtools。你有安装 Rtools 吗? cran.r-project.org/bin/windows/Rtools
  • Warning message: package ‘Rtools’ is not available (for R version 3.0.2)
  • Rtools 在你的路径中。也许您需要在计算机进入您的路径之前重新启动它?

标签: r ffbase ff


【解决方案1】:

这篇文章帮助了我Combine two data frames by rows (rbind) when they have different sets of columns。所以用你的做类似的事情:

   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-02-17
    • 2023-03-05
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多