r - 使用 dplyr 的每组的前“n”行——每组的数量不同
问题描述
我将使用内置chickwts
数据作为示例。
这是数据,有 5 种提要类型。
> head(chickwts)
weight feed
1 179 horsebean
2 160 horsebean
3 136 horsebean
4 227 horsebean
5 217 horsebean
6 168 horsebean
> table(chickwts$feed)
casein horsebean linseed meatmeal soybean sunflower
12 10 12 11 14 12
我想要的是每种饲料类型的重量排在前几行。但是,我需要为每种 Feed 类型设置不同的编号吗?例如,
top_n_feed <-
c(
"casein" = 3,
"horsebean" = 5,
"linseed" = 3,
"meatmeal" = 6,
"soybean" = 3,
"sunflower" = 2
)
我怎样才能做到这一点dplyr
?
要按n
重量获取每种提要类型的前几行,我可以使用如下代码,但我不确定如何将其扩展到每种提要类型的不同数字。
chickwts %>%
group_by(feed) %>%
slice_max(order_by = weight, n = 5)
解决方案
这真的不是一件dplyr
容易命名的事情。我建议合并数据然后过滤。
tibble(feed=names(top_n_feed), topn=top_n_feed) %>%
inner_join(chickwts) %>%
group_by(feed) %>%
arrange(desc(weight), .by_group=TRUE) %>%
filter(row_number() <= topn) %>%
select(-topn)
推荐阅读
- sharp - 使用 memfs 错误测试尖锐:[错误:输入文件丢失]
- python-3.x - 在烧瓶 api 中找不到 Gcloud
- sql - 计算日期之间可用的周期数并将行值排列为列值
- c# - 这个错误的原因是什么?(.Net 5,C#)
- amazon-web-services - 如何管理 terraform 多个文件并希望以不同的(手动)顺序运行
- python - 如果不是“onefile”案例,则带有 Pyinstaller 的 PyQt5 Gui 可以很好地工作……除此之外,还需要一些更改
- python - Python 3.8 lzma解压大文件增量输入输出
- flutter - Flutter Firebase 匿名认证一打开就登录
- postgresql - FATAL:数据库系统正在关闭 主机密钥验证失败。失去了连接
- python - 在 Python 代码中更有意义地打印结果?