计算 运行 R 中多个变量的平均值
Calculate running average over multiple variables in R
我正在尝试计算数据框中 R 中许多变量的 运行 平均值。以空气质量数据为例,我可以使用 dplyr 在 Wind
变量上实现这一点,如下所示:
require(dplyr)
airquality <- airquality %>%
group_by(Month) %>%
mutate(rec = 1) %>%
mutate(rollavg = cumsum(Wind)/cumsum(rec)) %>%
select(-rec)
head(as.data.frame(airquality))
# Ozone Solar.R Wind Temp Month Day rollavg
#1 41 190 7.4 67 5 1 7.400000
#2 36 118 8.0 72 5 2 7.700000
#3 12 149 12.6 74 5 3 9.333333
#4 18 313 11.5 62 5 4 9.875000
#5 NA NA 14.3 56 5 5 10.760000
#6 28 NA 14.9 66 5 6 11.450000
但是我的数据集有超过 100 个变量,那么有没有一种方法可以在不为每个变量编写代码的情况下实现这一点?假设我也想获得 Temp
的 运行 平均值,我正在寻找这样的东西:
require(dplyr)
vars <- c("Wind", "Temp")
airquality <- airquality %>%
group_by(Month) %>%
mutate(rec = 1) %>%
mutate(rollavg = cumsum(vars)/cumsum(rec)) %>%
select(-rec)
但这只是 returns NA。
你可以使用 across
:
airquality <- airquality %>%
group_by(Month) %>%
mutate(across(your_variables,~cumsum(.x)/row_number(),
.names = 'rollavg_{.col}'))
我正在尝试计算数据框中 R 中许多变量的 运行 平均值。以空气质量数据为例,我可以使用 dplyr 在 Wind
变量上实现这一点,如下所示:
require(dplyr)
airquality <- airquality %>%
group_by(Month) %>%
mutate(rec = 1) %>%
mutate(rollavg = cumsum(Wind)/cumsum(rec)) %>%
select(-rec)
head(as.data.frame(airquality))
# Ozone Solar.R Wind Temp Month Day rollavg
#1 41 190 7.4 67 5 1 7.400000
#2 36 118 8.0 72 5 2 7.700000
#3 12 149 12.6 74 5 3 9.333333
#4 18 313 11.5 62 5 4 9.875000
#5 NA NA 14.3 56 5 5 10.760000
#6 28 NA 14.9 66 5 6 11.450000
但是我的数据集有超过 100 个变量,那么有没有一种方法可以在不为每个变量编写代码的情况下实现这一点?假设我也想获得 Temp
的 运行 平均值,我正在寻找这样的东西:
require(dplyr)
vars <- c("Wind", "Temp")
airquality <- airquality %>%
group_by(Month) %>%
mutate(rec = 1) %>%
mutate(rollavg = cumsum(vars)/cumsum(rec)) %>%
select(-rec)
但这只是 returns NA。
你可以使用 across
:
airquality <- airquality %>%
group_by(Month) %>%
mutate(across(your_variables,~cumsum(.x)/row_number(),
.names = 'rollavg_{.col}'))