【问题标题】:Group data frame by week while preserving a week id按周对数据帧进行分组,同时保留周 ID
【发布时间】:2021-08-25 08:39:04
【问题描述】:

假设我的数据结构如下:

library('dplyr')
library('lubridate')

set.seed(808)

date <- sample(seq(as.Date('2015/01/01'), as.Date('2020/12/31'), by='day'), 100)
vals <- sample(seq(1, 375), 100)

df <- data.frame(date, vals)
df <- df[order(as.Date(df$date, format='%Y-%m-%d')),]

我知道如何按周分组以及如何对分组数据进行一些计算:

df_agg <- df %>% group_by(week = week(date)) %>% summarise(value = na.omit(mean(vals)))

这将返回一个新的数据框,该数据框有一列“周”,但该列中的数字并不表示它是哪一年的哪一周。所以不是第 1 周、第 2 周、第 3 周...等。我希望每周都有一个唯一的 ID(例如 01-2015 表示 2015 年的第一周)。

我为什么要那个? 我正在处理具有不同时间解决方案的多个数据集,并且我尝试将它们相互结合。有人知道怎么做吗?

【问题讨论】:

    标签: r dataframe dplyr


    【解决方案1】:

    如何将年份添加到组中?

        df %>%
          mutate(year = lubridate::year(date)) %>%
          group_by(year, week = week(date)) %>% 
          summarise(value = na.omit(mean(vals))) %>%
          mutate(id = paste(year, "-",week))
    

    结果是这样的

        # A tibble: 90 x 4
        # Groups:   year [6]
            year  week value id       
           <dbl> <dbl> <dbl> <chr>    
         1  2015     2    66 2015 - 2 
         2  2015     3   331 2015 - 3 
         3  2015     7   372 2015 - 7 
         4  2015    10   226 2015 - 10
         5  2015    11   176 2015 - 11
         6  2015    13     4 2015 - 13
         7  2015    14   164 2015 - 14
         8  2015    18   339 2015 - 18
         9  2015    20    59 2015 - 20
        10  2015    26     1 2015 - 26
        # ... with 80 more rows
    

    【讨论】:

    • OP 似乎不希望 yearweek 之间有空格。所以应该是paste0(year, "-", week)
    猜你喜欢
    • 2020-09-21
    • 2020-07-23
    • 2013-04-18
    • 2018-03-04
    • 1970-01-01
    • 2019-08-08
    • 2017-12-25
    • 2019-12-18
    • 1970-01-01
    相关资源
    最近更新 更多