计算固定间隔中可变数量坐标的值的平均值

Leo*_*ara -2 aggregate r

我想计算固定间隔(例如2)的坐标(第1列)的值(第2列)的平均值.但是,具有值的坐标的数量是可变的.我也想尝试不同大小的窗户.

数据示例(标签分隔)

2  3
2  4
2  5
3  1
4  2
5  1
5  2
6  8
Run Code Online (Sandbox Code Playgroud)

窗口大小为2的所需输出(我们每移动两个X值)

x  mean  window
2  3.25  2-3
3  3.25  2-3
4  1.66  4-5
5  1.66  4-5
6  8     6-7
Run Code Online (Sandbox Code Playgroud)

感谢您的时间和帮助!

the*_*ail 5

干得好:

test <- data.frame(one=c(2,2,2,3,4,5,5,6),two=c(3,4,5,1,2,1,2,8))
window.size <- 2
test$window.mean <- ave(
                          test$two,
                          findInterval(
                            test$one, 
                            seq(min(test$one),max(test$one),window.size)
                          )
                        )
aggregate(window.mean ~ one, data=test, FUN=head, 1)

  one window.mean
1   2    3.250000
2   3    3.250000
3   4    1.666667
4   5    1.666667
5   6    8.000000
Run Code Online (Sandbox Code Playgroud)

为了解释它是如何工作的:

如果在此示例中使用2的窗口定义一些切割点,则:

> seq(min(test$one),max(test$one),2)
[1] 2 4 6
Run Code Online (Sandbox Code Playgroud)

然后findInterval只在已定义的切割点之间标记组.

> findInterval(test$one,seq(min(test$one),max(test$one),2))
[1] 1 1 1 1 2 2 2 3
> test$one
[1] 2 2 2 3 4 5 5 6
Run Code Online (Sandbox Code Playgroud)

ave只计算第二个参数定义的组中第一个参数的平均值.因此,对于此示例使用from findInterval和来自的值test$two,您最终得到:

#groups 
[1] 1 1 1 1 2 2 2 3
#values
[1] 3 4 5 1 2 1 2 8

mean(c(3,4,5,1)) = 3.25
mean(c(2,1,2))   = 1.66
mean(c(8))       = 8
Run Code Online (Sandbox Code Playgroud)