【问题标题】:Dplyr merge rows based on one column value and sum other columnsDplyr 基于一列值合并行并对其他列求和
【发布时间】:2020-06-24 03:00:20
【问题描述】:

我当前的 df 如下所示:

 WEEK     COUNT    COUNT2    PERCENTAGE
2017-53    10        15         .05
2018-00    5         10         .1
2018-01    7         9          .1
....
2018-52    10        12         .06
2019-00    6         10         .05
....

我想做的是将每年的最后两周合并到一年的最后一周并合并COUNT, COUNT2, and PERCENTAGE。我目前想要合并的周数是:2017-53 and 2018-002018-52 and 2019-002019-52 and 2020-00。我想将其合并到2017-53, 2018-52, 2019-52 我的预期输出如下:

 WEEK     COUNT    COUNT2    PERCENTAGE
2017-53    15        25         .15
2018-01    7         9          .1
....
2018-52    16        22         .11
....

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    使用tidyverse,将'WEEK'转换为Date类后,arrange通过该列,提取'year',根据'year'的相邻元素的差异创建一个带有'WEEK'的分组',然后summarise 得到matches 'COUNT' 或 'PERCENTAGE' 列的sum

    library(stringr)
    library(lubridate)
    library(dplyr) #1.0.0
    df1 %>% 
       mutate(Date = as.Date(str_c(WEEK, "-01"), format = '%Y-%U-%w')) %>% 
       arrange(Date) %>% 
       mutate(year = year(Date)) %>% 
       group_by(WEEK = case_when(lag(year, default = first(year)) - year < 0 ~ 
              lag(WEEK), TRUE ~ WEEK)) %>%
        summarise(across(matches("COUNT|PERCENTAGE"), sum))
    # A tibble: 3 x 4
    #  WEEK    COUNT COUNT2 PERCENTAGE
    #  <chr>   <int>  <int>      <dbl>
    #1 2017-53    15     25       0.15
    #2 2018-01     7      9       0.1 
    #3 2018-52    16     22       0.11
    

    数据

    df1 <- structure(list(WEEK = c("2017-53", "2018-00", "2018-01", "2018-52", 
    "2019-00"), COUNT = c(10L, 5L, 7L, 10L, 6L), COUNT2 = c(15L, 
    10L, 9L, 12L, 10L), PERCENTAGE = c(0.05, 0.1, 0.1, 0.06, 0.05
    )), class = "data.frame", row.names = c(NA, -5L))
    

    【讨论】:

      【解决方案2】:

      您可以使用colSums(),如here 所示,但这有点复杂。我建议使用aggregate 和管道,如同一链接中进一步显示的那样。

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-13
        • 1970-01-01
        • 2018-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-02
        • 1970-01-01
        相关资源
        最近更新 更多