R:拆分df,然后用dplyr汇总

时间:2015-07-16 15:22:05

标签: r dplyr apply

我有一个很大的df,我想用dplyr命令总结一下。但是,我不希望在整个df中包含摘要,因为它包含我在不同时间点的数据快照。所以我要做的是首先按日期列拆分数据,然后在每个子集中进行总结。我不确定如何将sapply(或类似的)命令与dplyr的常规链接结合起来。

以下是示例数据集。这些数据的最终目标是获得每个日期到期年份的金额和金额百分比。换句话说,我将从分析得到三个汇总表/ dfs:第一列中三个日期各一个。

非常感谢你的帮助!

structure(list(Date = structure(c(16596, 16596, 16596, 16266, 
16266, 16266, 15706, 15706, 15706), class = "Date"), amount = c(1, 
5, 10, 11, 20, 3, 4, 6, 2), expirationyear = c(2020, 2030, 2020, 
2022, 2021, 2023, 2021, 2020, 2021)), .Names = c("Date", "amount", 
"expirationyear"), row.names = c(NA, -9L), class = "data.frame")

预期输出(根据要求):

  

表1:2015-06-10

     
      
  1. 2020:11; 11/16
  2.   
  3. 2030:5; 5/16
  4.         

    表2:2014-07-15

         
        
    1. 2020:10;四十一分之一十
    2.   
    3. 2021:20; 20/41
    4.   
    5. 2022:11; 11/41
    6.         

      表3:2013-01-01

           
          
      1. 2020:6; 6/12
      2.   
      3. 2021:6; 6/12
      4.   

我认为这将是一个表的列表,但由于我不确定如何实现,我可能是错的。

1 个答案:

答案 0 :(得分:4)

如果您想将数据拆分成列表并使用lapply,您可以这样做:

lapply(split(DF, DF$Date), function(dd) {
  dd %>% 
    group_by(expirationyear) %>% 
    summarise(Sum = sum(amount)) %>% 
    mutate(Percent = Sum/sum(Sum)*100)
  })

另一个(和更简单的)选项是简单地按日期和到期日分组:

DF %>% 
    group_by(Date, expirationyear) %>% 
    summarise(Sum = sum(amount)) %>% 
    mutate(Percent = Sum/sum(Sum)*100)