查找R中每1000000个计数的列的平均值

cha*_*has 2 aggregate r mean

我有一个数据框,具有以下结构,有两列data1data2.以下是示例数据:

data1       data2        
800000    1
800030    0.956521739130435
1000000   0.480916030534351
1686626   0.496
1687492   0.174757281553398
2148463   0.0344827586206897
2850823   0.05
2959087   0.0416666666666667
Run Code Online (Sandbox Code Playgroud)

我想计算第二行的平均值,即data2每1000000计数data1.这意味着它应该给出前2行然后接下来3行的平均值,然后给出接下来的3行,依此类推......

输出应该是一个数据帧,其最后一个值在区间1000000内,并且该区间的平均值data2:样本输出如下所示:

 800030  0.97826087
 1687492 0.38389110
 2959087 0.04204981
Run Code Online (Sandbox Code Playgroud)

在R中可以做一些帮助吗?

Chi*_*til 5

假设您的数据在data.frame中DF,您可以使用aggregate函数来执行此操作

> with(DF, aggregate(data2, by=list((data1+0.01)%/%1000000), mean ))
  Group.1          x
1       0 0.97826087
2       1 0.38389110
3       2 0.04204981
Run Code Online (Sandbox Code Playgroud)

要获得mean计算的列中的值,您将不得不aggregate再次使用- 这次是在data1列本身上.之后,您可以使用merge两个结果数据帧.

res <- with(DF, merge(aggregate(data1, by = list((data1 + 0.01)%/%1e+06), paste), aggregate(data2, by = list((data1 + 0.01)%/%1e+06), mean), by = "Group.1"))
names(res) <- c("Group", "Values", "Mean")
res
##   Group                    Values       Mean
## 1     0            800000, 800030 0.97826087
## 2     1 1000000, 1686626, 1687492 0.38389110
## 3     2 2148463, 2850823, 2959087 0.04204981
Run Code Online (Sandbox Code Playgroud)