【发布时间】:2015-10-06 03:25:52
【问题描述】:
我有一个很大的 df,我想用 dplyr 命令对其进行总结。但是,我不想要整个 df 的摘要,因为它包含我在不同时间点的数据的快照。所以我要做的是首先按日期列拆分数据,然后在每个子集中进行汇总。我不确定如何将 sapply(或类似的)命令与 dplyr 的常规链接结合起来。
以下是示例数据集。使用此数据的最终目标是获取每个日期的到期年份的金额的总和和百分比。换句话说,我会从分析中得到三个汇总表/df:第一列中的三个日期中的每一个都有一个。
非常感谢您的帮助!
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
- 2020:11; 11/16
- 2030: 5; 5/16
表 2:2014-07-15
- 2020:10; 10/41
- 2021:20; 20/41
- 2022: 11; 11/41
表 3:2013-01-01
- 2020: 6; 6/12
- 2021: 6; 6/12
我假设这将是一个表列表,但由于我不确定如何实现,我可能错了。
【问题讨论】:
-
以粗略的方式添加到上面
-
lapply(split(DF, DF$Date), function(dd) dd %>% group_by(expirationyear) %>% summarise(Sum = sum(amount)) %>% mutate(Percent = Sum/sum(Sum)*100))? -
@docendodiscimus 是的,这看起来是个好方法。在 hadleyverse(带有 magrittr)中,也可以编写像
. %>% ...这样的函数,而不是function(dd) dd %>% ...