我有一个数据框,具有以下结构,有两列data1和data2.以下是示例数据:
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中可以做一些帮助吗?
假设您的数据在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)