r - 使用 dplyr 为不同组选择不同数量的 top_n

标签 r dplyr

我有以下数据框。我想更喜欢 dplyr 来解决这个问题。 对于每个区域,我想要至少两个值。值 > 4.0 是首选。

因此,对于区域 10,保留所有值(> 4.0)。对于区域 20,选择前两个值。对于区域 30 也是如此。

zone <- c(rep(10,4), rep(20, 4), rep(30, 4))
set.seed(1)
value <- c(4.5,4.3,4.6, 5,5, rep(3,7)) + round(rnorm(12, sd = 0.1),1)
df <- data.frame(zone, value)
> df
   zone value
1    10   4.4
2    10   4.3
3    10   4.5
4    10   5.2
5    20   5.0
6    20   2.9
7    20   3.0
8    20   3.1
9    30   3.1
10   30   3.0
11   30   3.2
12   30   3.0

期望的输出如下

> df
   zone value
1    10   4.4
2    10   4.3
3    10   4.5
4    10   5.2
5    20   5.0
6    20   3.1
7    30   3.1
8    30   3.2

我想过使用 top_n 但它为每个区域选择相同的数字。

最佳答案

您可以在top_n中动态计算n

library(dplyr)  
df %>% group_by(zone) %>% top_n(max(sum(value > 4), 2), value)


#   zone value
#  <dbl> <dbl>
#1    10   4.4
#2    10   4.3
#3    10   4.5
#4    10   5.2
#5    20   5  
#6    20   3.1
#7    30   3.1
#8    30   3.2

关于r - 使用 dplyr 为不同组选择不同数量的 top_n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60690844/

相关文章:

r - 如何在 dplyr 中使用链接来访问 "internal"变量

r - 在 R 中将 K 转换为千 (1000)

R dplyr : how to remove smaller groups?

r - .data 和 cur_data() 之间的区别

r - 遍历每一列和每一行,做一些事情

R:按 ID 和按指定数据聚合历史记录

r - 如何在 r 中处理具有超过 500 万个观测值的数据帧时加速迭代?

java - 使用 XLConnect 写入 MS Excel 工作表时出现 R NoSuchMethodError (Java)

r - 将字符串拆分为 R 中的新行

r - 过滤任何命令时 group_by 变慢