max*_*max 4 r dplyr data-cleaning data-wrangling
我将使用内置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
Run Code Online (Sandbox Code Playgroud)
我想要的是每种饲料类型按重量计算的前几行。但是,对于每种 Feed 类型我都需要不同的编号吗?例如,
top_n_feed <-
c(
"casein" = 3,
"horsebean" = 5,
"linseed" = 3,
"meatmeal" = 6,
"soybean" = 3,
"sunflower" = 2
)
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点dplyr?
要按n重量获得每种提要类型的顶行,我可以使用如下代码,但我不确定如何将其扩展到每种提要类型的不同数字。
chickwts %>%
group_by(feed) %>%
slice_max(order_by = weight, n = 5)
Run Code Online (Sandbox Code Playgroud)
这真的不是一个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)
Run Code Online (Sandbox Code Playgroud)