cast函数非常消耗内存,如何处理呢?
Posted
技术标签:
【中文标题】cast函数非常消耗内存,如何处理呢?【英文标题】:cast function is extremely memory consuming, how to handle it? 【发布时间】:2016-07-04 16:56:36 【问题描述】:我有一张桌子看起来像:
date item_id store_id sale_num
1/1/15 33 1 10
1/1/15 33 2 12
1/1/15 33 3 15
1/1/15 44 1 54
1/1/15 44 3 66
1/2/15 33 1 14
....
我想对表进行强制转换,以便将 store_id 放入多个列中,并且 value 是 sale_num。表格应该是这样的:
date item_id store1 store2 store3
1/1/15 33 10 12 15
1/1/15 44 54 NA 66
1/2/15 33 14 NA NA
......
当我在小范围内使用强制转换函数执行此操作时,原始表中的 1000 行,没有问题。
但是,原始表有 38,000,000 行并在 R 中消耗 1.5 GB 内存。 当我使用 cast 函数时,该函数消耗大约 34 GB 内存,并且它会无限运行。
它有什么问题?有没有其他办法?
【问题讨论】:
【参考方案1】:我们可以使用data.table
中的dcast
。它应该比来自reshape
的cast
更有效。我们将“data.frame”转换为“data.table”(setDT(df1)
),然后使用dcast
。
library(data.table)
dcast(setDT(df1), date+item_id~ paste0("store",
store_id), value.var="sale_num")
# date item_id store1 store2 store3
#1: 1/1/15 33 10 12 15
#2: 1/1/15 44 54 NA 66
#3: 1/2/15 33 14 NA NA
【讨论】:
以上是关于cast函数非常消耗内存,如何处理呢?的主要内容,如果未能解决你的问题,请参考以下文章