r - 通过分组选择顶部的数据框
问题描述
我有一个数据框,例如:
set.seed(1)
df <- data.frame(
sample = 1:50,
value = runif(50),
group = c(rep(NA, 20), gl(3, 10)))
我想根据价值选择前 10 个样本。但是,如果有一个对应于样本的组,我只想包含该组中的一个样本。如果 group == NA,我想包括所有这些。按值排列 df 如下所示:
df_top <- df %>%
arrange(-value) %>%
top_n(10, value)
sample value group
1 46 0.7973088 3
2 49 0.8108702 3
3 22 0.8394404 1
4 2 0.8612095 NA
5 27 0.8643395 1
6 20 0.8753213 NA
7 44 0.8762692 3
8 26 0.8921983 1
9 11 0.9128759 NA
10 30 0.9606180 1
我想在我的数据框中包含样本 36、22、2、20、11 和接下来的五个最高值,这些值继续符合模式。我该如何做到这一点?
解决方案
我想我想通了。这会是最好的方法吗:
df_top <- df %>%
arrange(-value) %>%
group_by(group) %>%
filter(ifelse(!is.na(group), value == max(value), value == value)) %>%
ungroup() %>%
top_n(10, value)
# A tibble: 10 x 3
sample value group
<int> <dbl> <int>
1 18 0.992 NA
2 7 0.945 NA
3 21 0.935 1
4 4 0.908 NA
5 6 0.898 NA
6 35 0.827 2
7 41 0.821 3
8 20 0.777 NA
9 15 0.770 NA
10 17 0.718 NA
推荐阅读
- json - Pentaho 数据集成 - 雪花 - 将字段转换为数据类型 VARIANT
- python - ModuleNotFoundError:没有名为“paypal”的模块
- python - PyLint 与 f 字符串
- bash - 如何在 xargs 中将函数作为参数传递?
- php - 如何使用 Ratchet 在 ssl (wss) 服务器上启用 keepAlive?
- xamarin.forms - 如何在 Xamarin IOS 和 Xamarin Android 的启动画面中添加视频
- java - 在同一个包中的编译类中看不到静态方法
- python - 如何在python 3.6中获取存储在列表中的字典项
- powershell - 希望将 netstat 功能添加到 Get-ADComputer powershell 脚本
- windows - Bazel 正在构建没有 .exe 扩展名的可执行文件