r - 计算数据框中每个第二个值的平均值

标签 r dataframe aggregate mean

我想按平均值聚合每两个单元格值,然后沿着数据框的列继续执行相同的过程。 更准确地说,请参阅以下数据框摘录:

    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/

相关文章:

r - 带有分数logit模型的glmulti

python - Pandas - 将字符串更改为数字

r - R中按月的时间序列聚合

Python-如何用组的模态值填充字符串值

r - R中的聚合函数使用列索引号而不是名称

r - 从数据框列中查找索引或唯一值

r - 如何让 Beamer Rmarkdownappendixnumberbeamer 包不计算附录页数?

r - 使用条件子集 data.table

multithreading - 使用汇总的Scala并行频率计算不起作用

mysql - JOIN MySQL 的表结果中未包含 SUM 信息的子查询