我有一个很大的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
- 2020:11; 11/16
- 2030:5; 5/16
醇>表2:2014-07-15
- 2020:10;四十一分之一十
- 2021:20; 20/41
- 2022:11; 11/41
醇>表3:2013-01-01
- 2020:6; 6/12
- 2021:6; 6/12
醇>
我认为这将是一个表的列表,但由于我不确定如何实现,我可能是错的。
答案 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)