我在R中有以下数据框:
> head(df)
date x y z n t
1 2012-01-01 1 1 1 0 52
2 2012-01-01 1 1 2 0 52
3 2012-01-01 1 1 3 0 52
4 2012-01-01 1 1 4 0 52
5 2012-01-01 1 1 5 0 52
6 2012-01-01 1 1 6 0 52
> str(df)
'data.frame': 4617600 obs. of 6 variables:
$ date: Date, format: "2012-01-01" "2012-01-01" "2012-01-01" "2012-01-01" ...
$ x : Factor w/ 45 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
$ y : Factor w/ 20 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
$ z : Factor w/ 111 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
$ n : int 0 0 0 0 0 0 0 0 29 0 ...
$ t : num 52 52 52 52 52 52 52 52 52 52 ...
我想要做的是将这个大df拆分成更小的数据帧,如下所示: 1)我希望每个因子值'x'有45个数据帧。 2)我想为每个因子值'z'进一步分割这45个数据帧。所以我想要总共45 * 111 = 4995个数据帧。
我在网上看到很多关于拆分数据框的内容,这些数据框将它们变成了列表。但是,我没有看到如何进一步拆分列表。我的另一个问题是计算机内存。如果我将数据框拆分成列表,它是否仍会占用尽可能多的计算机内存?如果我想在分割数据上运行一些预测模型,那么似乎无法做到。理想情况下,我会将数据分成许多数据帧,在第一个分割数据帧上运行预测模型,获得我需要的结果,然后在继续下一个之前将其删除。
答案 0 :(得分:1)
这就是我要做的。您的数据已经适合内存,因此请将其保留为一个部分:
require(data.table)
setDT(df)
df[,{
sum(t*n) # or whatever you're doing for "prediction models"
},by=list(x,z)]