我想按平均值聚合每两个单元格值,然后沿着数据框的列继续执行相同的过程。 更准确地说,请参阅以下数据框摘录:
X Y Z
1 FRI 200101010000 -6.72
2 FRI 200101010030 -6.30
3 FRI 200101010100 -6.26
4 FRI 200101010130 -5.82
5 FRI 200101010200 -5.64
6 FRI 200101010230 -5.29
7 FRI 200101010300 -5.82
8 FRI 200101010330 -5.83
9 FRI 200101010400 -5.83
10 FRI 200101010430 -6.04
11 FRI 200101010500 -5.80
12 FRI 200101010530 -6.09
我想通过以 00 和 30 结尾的 Y 计算每个 Z 的平均值,这意味着计算#row 1+2、#row 3+4、#row 5+6 等的平均值...请参阅我在这里的期望:
X Y Z
1 FRI 200101010100 -6.51
2 FRI 200101010200 -6.04
3 FRI 200101010300 -5.47
...
解释:Y 是时间:YYYYMMDDhhmm,我想将 30 分钟的测量值平均为 1 小时的测量值
最佳答案
这是一个可能的data.table
解决方案
library(data.table)
setDT(df)[, .(Y = Y[1L], Z = mean(Z)), by = .(X, indx = cumsum(substr(Y, 11, 12) == '00'))]
# X indx Y Z
# 1: FRI 1 200101010000 -6.510
# 2: FRI 2 200101010100 -6.040
# 3: FRI 3 200101010200 -5.465
# 4: FRI 4 200101010300 -5.825
# 5: FRI 5 200101010400 -5.935
# 6: FRI 6 200101010500 -5.945
或者根据@akruns 的评论,使用来自 base 的 aggregate
(虽然输出可能需要一些额外的 tweeking)
aggregate(Z ~ X + indx, transform(df, indx = cumsum(substr(Y, 11, 12) == '00')), mean)
关于r - 计算数据框中每个第二个值的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31022993/