【问题标题】:Retrieve month wise data检索月份数据
【发布时间】:2018-01-10 06:02:49
【问题描述】:
df<-data.frame(id=c("xx33","xx33","xx22","xx11","xx11","xx00"),amount=c(10,15,100,20,10,15),date=c("01/02/2013","01/02/2013","02/02/2013","03/03/2013","03/03/2013","04/04/2013"))

    id  amount  date
1   xx33    10  01/02/2013
2   xx33    15  01/02/2013
3   xx22    100 02/02/2013
4   xx11    20  03/03/2013
5   xx11    10  03/03/2013
6   xx00    15  04/04/2013

输出类似

    id  201302  201303  201304
1   xx33    25    0        0
2   xx22   100    0        0
3   xx11    0     30       0
4   xx00    0     0        15 

【问题讨论】:

    标签: r date dplyr


    【解决方案1】:

    tidyverse 的另一种方式:

    library(tidyverse)
    library(lubridate)
    
    df %>%
      mutate(month_year = format(dmy(date), "%Y%m")) %>%
      group_by(month_year, id) %>% 
      summarise(s = sum(amount)) %>% 
      spread(month_year, s, fill = 0)
    
    # A tibble: 4 x 4
      id     `201302` `201303` `201304`
    * <fctr>    <dbl>    <dbl>    <dbl>
    1 xx00        0        0       15.0
    2 xx11        0       30.0      0  
    3 xx22      100        0        0  
    4 xx33       25.0      0        0  
    

    【讨论】:

      【解决方案2】:

      将“日期”转换为Date 类,使用format 提取“年月”并使用xtabsbase R 中创建数据透视表

      df$monthyear <- format(as.Date(df$date, "%d/%m/%Y"), "%Y%m")
      xtabs(amount~ id + monthyear, df)
      #       monthyear
      #id     201302 201303 201304
      #  xx00      0      0     15
      #  xx11      0     30      0
      #  xx22    100      0      0
      #  xx33     25      0      0
      

      【讨论】:

      • 我想这是因为这个问题有一个 dplyr 标签(虽然不需要投票,而且不是我:-))...(我喜欢你的简单回答)跨度>
      【解决方案3】:

      为了完整起见,这里还有一个使用reshape2 包中的dcast() 的解决方案,它是dplyr 的前身之一:

      library(reshape2)
      library(lubridate)
      dcast(df, id ~ format(dmy(date), "%Y%m"), sum, value.var = "amount")
      
          id 201302 201303 201304
      1 xx00      0      0     15
      2 xx11      0     30      0
      3 xx22    100      0      0
      4 xx33     25      0      0
      

      【讨论】:

        猜你喜欢
        • 2014-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-28
        • 1970-01-01
        • 2012-02-02
        • 1970-01-01
        • 2021-07-15
        相关资源
        最近更新 更多