我想通過等於data.frame中的一個變量的累積總和來聚合R data.frame。我搜索了很多,但可能我不知道正確的術語來找到有用的東西。等分桶聚合數據框
假設我有此data.frame:
> x <- data.frame(cbind(p=rnorm(100, 10, 0.1), v=round(runif(100, 1, 10))))
> head(x)
p v
1 10.002904 4
2 10.132200 2
3 10.026105 6
4 10.001146 2
5 9.990267 2
6 10.115907 6
7 10.199895 9
8 9.949996 8
9 10.165848 8
10 9.953283 6
11 10.072947 10
12 10.020379 2
13 10.084002 3
14 9.949108 8
15 10.065247 6
16 9.801699 3
17 10.014612 8
18 9.954638 5
19 9.958256 9
20 10.031041 7
我想在x減少到一個較小的data.frame其中每一行包含p的加權平均值,通過V加權,對應於量n個單位這種訴的東西。
> n <- 100
> cum.v <- cumsum(x$v)
> f <- cum.v %/% n
> x.agg <- aggregate(cbind(v*p, v) ~ f, data=x, FUN=sum)
> x.agg$'v * p' <- x.agg$'v * p'/x.agg$v
> x.agg
f v * p v
1 0 10.039369 98
2 1 9.952049 94
3 2 10.015058 104
4 3 9.938271 103
5 4 9.967244 100
6 5 9.995071 69
第一個問題,我不知道是否有一個更好的(更有效的方法),以上面的代碼。第二,更重要的問題是如何糾正上面的代碼以獲得更精確的分流。也就是說,x.agg
中的每一行都應包含v
的單位100
單位,而不僅僅是大致如上所述。例如,第一行包含對應於98個單位v
的前17行x
的合計。下一行(第18行)包含5個單位v
,完全包含在下一個存儲桶中。我想要取而代之的是將第18行的2個單元歸入第一個桶,其餘3個單元歸入下一個。
在此先感謝您提供的任何幫助。
哪裏可以找到這個'index'函數? – Arun 2013-02-26 21:11:50
@阿倫哦,我的壞。我認爲它是已經加載的xts的功能。它可以用rownames代替,結果仍然有效。甚至seq從1到nrow(z) – 2013-02-27 00:48:49