我的数据 (df) 看起来与此类似
我想获得每个地址 3 天的平均值,如下所示
我尝试每三天提取一次日期,例如 d<-date[seq(1,length(date),by=3)]
。我使用 dat<-rowsum(df[,-1],rep(1:6,each=3))
计算了该值。然后将整个数据帧除以 3 并合并 d 和 dat。
我试图找到rowmean像rowsum一样工作,但没有成功。另外,滚动方式不适合我的情况,因为它对重叠的行进行平均(多次使用行)。
请帮助我改进我的方法。非常感谢。
最佳答案
您可以创建每 3 行的组并取所有“地址”列的平均值 -
library(dplyr)
df %>%
mutate(date = as.Date(date)) %>%
group_by(grp = ceiling(row_number()/3)) %>%
summarise(date = last(date),
across(starts_with('address'), mean, na.rm = TRUE)) %>%
select(-grp)
# date address1 address2
# <date> <dbl> <dbl>
#1 2015-01-03 4 6
#2 2015-01-06 5 3
另一个选项是减少
3 天,但它会给出小组的开始日期。
df %>%
mutate(date = as.Date(date)) %>%
group_by(date = cut(date, '3 days')) %>%
summarise(across(starts_with('address'), mean, na.rm = TRUE))
关于r - 获取没有组的每 n 行的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68437978/