我的表格如下:
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
......
当我使用小规模的cast函数,原始表中的1000行时,没有问题。
但是,原始表在R中有38,000,000行和comsumes 1.5 GB内存。 当我使用强制转换功能时,该功能的成本约为34 GB内存,并且无休止地运行。
它有什么问题?还有其他办法吗?
答案 0 :(得分:6)
我们可以使用dcast
中的data.table
。它应该比cast
中的reshape
更有效。我们转换了' 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