我想通过等于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