我有此数据框导出:
date <- c("2012-10-01", "2012-10-01", "2012-10-01","2012-10-01","2012-10-01","2012-11-01","2012-11-01","2012-11-01","2012-11-01", "2012-11-01")
item <- c("A", "B", "D", "F", "C", "A", "B", "C","H","D")
amount <- c(20,50,35,55,32,40,53,23,74,99)
exports <- data.frame(date, item, amount)
因此,对于每个月,我们都有一组导出的项目(在原始数据集中,平均每个月有15个项目)。我想要的是每月仅获得金额列中的4个最高值。因此,每个月我将有4行,而不是现在的15行。从一月的第一到第四,从二月的第一到第四,依此类推。如果有人可以提供帮助,我深表感谢。
附言:毕竟,主要目标是绘制随这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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句