R:分裂df,然后用dplyr总结

R: Splitting df, then summarize with dplyr

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

下面是一个示例数据集。此数据的最终目标是根据每个日期的到期年份获取金额的总和和百分比。换句话说,我将从分析中得到三个摘要 tables/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")

预期输出(按要求):

table 1: 2015-06-10

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

table 2: 2014-07-15

  1. 2020: 10; 10/41
  2. 2021: 20; 20/41
  3. 2022: 11; 11/41

table 3: 2013-01-01

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

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

如果你想将数据拆分成一个列表并使用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)