首页 > 解决方案 > 获取不带组的每 n 行的均值

问题描述

我的数据 (df) 与此类似

日期 地址1 地址2
2015-01-01 2 8
2015-01-02 3 7
2015-01-03 7 3
2015-01-04 3 1
2015-01-05 9 4
2015-01-06 3 4

我想像这样在每个地址获得 3 天的平均值

日期 地址1 地址2
2015-01-03 4 6
2015-01-06 5 3

我试图每三天提取一次日期,例如d<-date[seq(1,length(date),by=3)]. 我使用dat<-rowsum(df[,-1],rep(1:6,each=3)). 然后将整个数据帧除以 3 并组合ddat

我试图找到类似rowsum的rowmean作品,但没有成功。此外,滚动方式不适合我的情况,因为它对重叠的行进行平均(多次使用行)。

请帮助我改进我的方法。非常感谢。

标签: rdate

解决方案


您可以创建每 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

另一种选择是到cut3 天,但它会给出组的开始日期。

df %>%
  mutate(date = as.Date(date)) %>%
  group_by(date = cut(date, '3 days')) %>%
  summarise(across(starts_with('address'), mean, na.rm = TRUE))

推荐阅读