【问题标题】:R ff / ffbase merge creating rowsR ff / ffbase 合并创建行
【发布时间】:2012-05-13 15:49:51
【问题描述】:

我正在使用 ffffbase 包来组合两个 ffdf 对象,但是当我使用 merge 语句时,它从目标 ffdf 中的 100 万行变为 800 万行。

ffdf1 是 100 万行乘 6 列:

> summary(ffdf2)
              Length  Class     Mode
userid        1000000 ff_vector list
V2            1000000 ff_vector list
V3            1000000 ff_vector list
V4            1000000 ff_vector list
V5            1000000 ff_vector list
V6            1000000 ff_vector list

ffdf2 约为 2000 万行 X 3 列,如下所示:

  userid      gender      age
    1         1          3
    2         1          2
    3         2          5
    4         0          4
    5         2          3
    ...       ...       ...

我使用以下代码将两者合并:

ffdf3 <- merge(ffdf1, ffdf2, by.x="userid",by.y="userid",all.x=T,sort=F)

结果是这样的:

> summary(ffdf3)
                  Length  Class     Mode
    userid        8000000 ff_vector list
    V2            8000000 ff_vector list
    V3            8000000 ff_vector list
    V4            8000000 ff_vector list
    V5            8000000 ff_vector list
    V6            8000000 ff_vector list
    gender        8000000 ff_vector list
    age           8000000 ff_vector list

知道为什么长度从 1 毫米变为 8 毫米吗?

编辑:

当我尝试这个时:

ffdf3 <- merge(ffdf1, ffdf2, by.x="userid",by.y="userid",all.x=F,sort=F)

我明白了:

> summary(ffdf3)
                      Length  Class     Mode
        userid        740383 ff_vector list
        V2            740383 ff_vector list
        V3            740383 ff_vector list
        V4            740383 ff_vector list
        V5            740383 ff_vector list
        V6            740383 ff_vector list
        gender        740383 ff_vector list
        age           740383 ff_vector list

这也是运行合并的输出:

2012-05-13 14:49:06, x has 2 chunks, y has 8 chunks
2012-05-13 14:49:06, working on x chunk 1:500000
2012-05-13 14:49:07, working on y chunk 1:2958661
2012-05-13 14:49:16, working on y chunk 2958662:5917322
2012-05-13 14:49:32, working on y chunk 5917323:8875983
2012-05-13 14:49:45, working on y chunk 8875984:11834644
2012-05-13 14:49:57, working on y chunk 11834645:14793305
2012-05-13 14:50:09, working on y chunk 14793306:17751966
2012-05-13 14:50:20, working on y chunk 17751967:20710627
2012-05-13 14:50:30, working on y chunk 20710628:23669283
2012-05-13 14:50:40, working on x chunk 500001:1000000
2012-05-13 14:50:41, working on y chunk 1:2958661
2012-05-13 14:50:52, working on y chunk 2958662:5917322
2012-05-13 14:51:03, working on y chunk 5917323:8875983
2012-05-13 14:51:14, working on y chunk 8875984:11834644
2012-05-13 14:51:24, working on y chunk 11834645:14793305
2012-05-13 14:51:36, working on y chunk 14793306:17751966
2012-05-13 14:51:47, working on y chunk 17751967:20710627
2012-05-13 14:51:58, working on y chunk 20710628:23669283

ffdf1 包含 677840 个唯一的 userid。所以在 1mm 的行中有一些重复。

【问题讨论】:

  • @screenchOwl,如果您发布一个可复制的小示例,我们会更容易为您提供帮助。

标签: r merge


【解决方案1】:

merge.ffdf 包含一个错误,目前只允许正确进行内部连接,而不是 all.x=TRUE 和 all.y=FALSE。该功能适用​​于@http://code.google.com/p/fffunctions/。问题是当您没有匹配的记录时,在进行左外连接时,需要更改 vmode 才能正确允许 NA。正在处理中。

仅供参考。现在在 http://code.google.com/p/fffunctions/ 的开发版本中解决了这个问题,并将在未来几周内上传到 CRAN。

【讨论】:

  • 非常感谢您提供的信息。你们在 ff / ffbase 软件包上做得很好。我发现它们对大型数据集非常有帮助。
  • @jwijffels 这个错误现在修复了吗?
  • 当然 - 这已在 2012 年 6 月 4 日在 CRAN 上的 ffbase 0.5 中修复。见cran.r-project.org/web/packages/ffbase/NEWS
猜你喜欢
  • 2015-04-08
  • 2017-09-16
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
  • 2014-12-14
  • 2014-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多