【发布时间】:2020-12-30 13:22:23
【问题描述】:
首先,我的问题的简单 R 示例:
> df
x y
1 1 3
2 2 7
3 4 9
4 8 0
5 3 1
6 12 24
我想为每一列计算每一行的三个后续行数据的平均值,这会产生以下数据框。
> dfRes
xRes yRes
x y
1 2.333333 6.333333
2 4.666667 5.333333
3 5.000000 3.333333
4 7.666667 8.333333
5 NA NA
6 NA NA
由于我有很多列和行的非常大的数据框,我想避免使用 for 循环进行此计算。我尝试定义自定义函数以使用可用的sapply 函数。
有人知道 R 中的一个简单解决方案吗?此问题的计算时间相对较快?
---- 更新---- 计算过程应该是这样的:
xRes[1] = mean(x[1] + x[2] + x[3])
xRes[2] = mean(x[2] + x[3] + x[4])
...
xRes[5] = NA # because there is no x[7]
【问题讨论】:
-
您是如何准确计算示例数据集中的结果的?
-
第一个值 3.5 或第二个值 14 怎么样?
-
例如
x[1] + x[2] + x[3] = xRes[1]、x[2] + x[3] + x[4] = xRes[2]等。对于 x[5],无法计算平均值,因为我们缺少第 7 行的值。我正在更新我的问题,以便更清楚地说明这一点。 -
一般而言,您可以通过 lag(x, i) 获取列中的先前值,其中 i 表示您回溯了多远。所以 (lag(x) + lag(x,2) + lag(x,3))/3 会给你你想要的平均值。您甚至不需要为此定义新函数。只需使用 dplyr 并在所有列中使用 mutate。
标签: r performance sapply