【发布时间】:2019-04-09 18:34:27
【问题描述】:
我正在尝试通过具有约 2,000 个唯一值的变量将一个非常长的数据帧(17,000,000 行;111.2MB RDS 文件)传播为宽格式。在 16 核 64GB RAM linux 机器上运行它会产生Error: cannot allocate vector of size 3132.3GB。
下面的dplyrcode 完美地适用于较小的数据集(约 1/3 大小)。
data <- data %>%
rowid_to_column() %>%
spread(key = parameter_name, value = value) %>%
select(-rowid)
有什么办法可以完成这项工作吗?更高效的编码?
【问题讨论】:
-
你能提供一些数据来运行你的代码吗?您是否尝试过使用 {data.table} 的等效解决方案?
-
正如@markus 链接中的一个cmets 中所建议的那样(公平地说,我的评论):如果您的数据相当大,可能需要
split,单独重塑每个元素,然后以某种方式重新组合。重新组合时必须注意确保列和行正确对齐,但在大方案中这是最小的努力。 -
你也可以试试
widyr包github.com/dgrtwo/widyr
标签: r performance dplyr spread