2
我試圖找出聚合看起來類似於一個大的數據幀(約50M行)的最快方法:R:下大彙總數據幀分組條件
>sample_frame = data.frame("id" = rep(sample(1:100,2,replace=F),3),
+ "date" = sample(seq(as.Date("2014-01-01"),as.Date("2014-02-13"),by=1),6),
+ "value" = runif(6))
> sample_frame
id date value
1 73 2014-02-11 0.84197491
2 7 2014-01-14 0.08057893
3 73 2014-01-16 0.78521616
4 7 2014-01-24 0.61889286
5 73 2014-02-06 0.54792356
6 7 2014-01-06 0.66484848
在這裏,我們有2個具有3個日期的唯一ID和分配給每個日期的值。我知道我可以使用ddply或data.table,或者只使用lapply來聚合並查找每個ID的均值。
我真正想要的是一種快速查找最近兩個日期的每個ID的均值的方法。例如,sapply:
> sapply(split(sample_frame,sample_frame$id),function(x){
+ mean(x$value[x$date%in%x$date[order(x$date,decreasing=T)][1:2]])
+ })
7 73
0.3497359 0.6949492
我無法弄清楚如何讓data.table做到這一點。思考?提示?
好問題,對不清楚的抱歉。是的,每個ID的日期應該是唯一的。如果有隻有1行的組,則應該返回該行的值。 – nfmcclure
沒有NA值,數據是乾淨的。 – nfmcclure