【发布时间】:2021-01-19 23:18:34
【问题描述】:
问题总结
目前,我正在尝试应用一个以某种方式计算滞后数据的函数,该函数必须应用于不同的组集,我似乎无法理解如何做到这一点Dplyr.
预期结果
例如,数据如下所示:
date group value
1 Jan 1 A 0
2 Feb 1 A 1
3 Mar 1 A 0
4 Jan 1 B 2
5 Feb 1 B 4
6 Mar 1 B 0
我们的想法是获得这样的输出,例如 2 个月的滚动平均值:
date group value roll_mean
1 Feb 1 A 1 0.5
2 Mar 1 A 0 0.5
3 Feb 1 B 4 3
4 Mar 1 B 0 2
可重现的例子
为了示例,我准备了一个可在 R 中使用的示例,其中包含数据和函数:
data <- data.frame(
date = as.yearmon(
as.Date(
c("01/01/2020", "01/02/2020", "01/03/2020", "01/01/2020", "01/02/2020", "01/03/2020"),
origin = "1970-01-01")
),
group = c("A", "A", "A", "B", "B", "B"),
value = c(0, 1, 0, 2, 4, 0)
)
computing_function <- function(data) {
output_data <- data %>%
mutate(
roll_mean = rollmean(data$value, k = 2, fill = NA, align="right")
) %>%
drop_na(roll_mean)
return (output_data)
}
问题
我知道如何使用循环来做到这一点,但这会很耗时,不可靠并且维护起来很痛苦。例如,组的输出有效。但是,即使使用summarise(),我也无法使其在 Dplyr 中工作。我在我的逻辑中遗漏了一些东西,我无法确定它是什么。
computing_function(data %>% filter(group == "B"))
# date group value roll_mean
# 1 Feb 1 B 4 3
# 2 Mar 1 B 0 2
data %>%
group_by(group) %>%
summarise(computing_function(.))
# Error
有没有办法在 dplyr-wise 方面做到这一点?
函数的逻辑应该留在里面,想法是不要把它偏移到dplyr表达式中。
使用的包:
- Dplyr
- 动物园
【问题讨论】: