如何解决如何每月仅获取n个最大值
我有此数据框导出:
date <- c("2012-10-01","2012-10-01","2012-11-01","2012-11-01")
item <- c("A","B","D","F","C","A","H","D")
amount <- c(20,50,35,55,32,40,53,23,74,99)
exports <- data.frame(date,item,amount)
因此,对于每个月,我们都有一组导出的项目(在原始数据集中,平均每月有15个项目)。我想要的是每月仅获得金额列中的4个最高值。因此,每个月我将有4行,而不是现在的15行。从一月的第一到第四,从二月的第一到第四,依此类推。如果有人可以提供帮助,我将不胜感激。
Ps:毕竟,主要目标是绘制随这4个项目的演变而绘制的时间序列。如果我解决了上述问题,那么可以完成绘图工作,但是我可以接受其他解决方案。
解决方法
按“月”分组后,我们可以使用top_n
library(dplyr)
exports %>%
group_by(month = format(as.Date(date),'%m')) %>%
top_n(4,amount)
-输出
# A tibble: 4 x 4
# Groups: month [1]
# date item amount month
# <chr> <chr> <dbl> <chr>
#1 2012-10-01 F 55 10
#2 2012-10-02 B 53 10
#3 2012-10-02 H 74 10
#4 2012-10-02 D 99 10
或使用slice_max
exports %>%
group_by(month = format(as.Date(date),'%m')) %>%
slice_max(order_by = amount,n = 4)
-输出
# A tibble: 4 x 4
# Groups: month [1]
# date item amount month
# <chr> <chr> <dbl> <chr>
#1 2012-10-02 D 99 10
#2 2012-10-02 H 74 10
#3 2012-10-01 F 55 10
#4 2012-10-02 B 53 10
,
我们可以将日期转换为日期类,从日期中提取年月,然后为每个月选择前4个值。
library(dplyr)
library(lubridate)
exports %>%
mutate(date = ymd(date),month_year = format(date,'%b %Y')) %>%
arrange(desc(amount)) %>%
group_by(month_year) %>%
slice_head(n = 4)
#Can also do
#slice(1:4)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。