【发布时间】:2016-08-26 18:21:36
【问题描述】:
我尝试了一些解决方案,但它们不适合这个用例。我有 32 GB 的 RAM,但在使用 cast、dcast 或 spread 时我仍然会遇到天花板。我循环查找一个列表,我花了超过 24 小时来完成我拥有的 4200 万行中的一部分。我想要一个使用 apply 系列的基本解决方案,但我知道这是否行不通......我觉得它不会,因为我必须查询下一行以确定 addressID 是否匹配(或者 data.框架未排序,它必须搜索列的其余部分)。
这是一个(排序的)data.frame 示例:
addressID MAKE
104554 LINCOLN
104554 LINCOLN
104628 HYUNDAI
104628 TOYOTA
104628 SUBARU
104677 HYUNDAI
104677 HYUNDAI
我想要长格式或列表,这样我就有了:
$`104554`
[1] LINCOLN LINCOLN
$`104628`
[1] HYUNDAI TOYOTA SUBARU
$`104677`
[1] HYUNDAI HYUNDAI
我将获得一些有 6 辆车的地址。我有至少 45 辆 MAKE 的汽车,所以我不希望有 2000 万 X 50 列矩阵/data.frame dcast、cast、spread 等似乎需要进行此运行的方式(他们'由于 RAM 限制而无法工作)。我觉得这应该是一个简单的解决方案,但它逃脱了我。
【问题讨论】:
-
不妨看看
split。它将创建您在第二个代码块中的列表。像myList <- split(df, df$addressID)这样的东西。它应该比任何重塑功能都更有效。 -
这很好用。它在运行
myList <- split(df[,"MAKE"], df$addressID)时给出了我想要的确切输出
标签: r out-of-memory