解释起来有点棘手,我会尽力而为,在下面查询。我有一个 df 如下。我需要根据国家/地区列中的最大流行率按组过滤行,但在上述组中尚未发生。 (根据输出(图片),A 没有出现在 group2 中的原因是因为它已经出现在了 Group 1 中)
简而言之,我需要在 country 列中获得唯一值,同时在 pop 中获得最大值(在组级别上)。我希望图片可以传达我无法传达的内容。 (首选 Tidyverse 解决方案)
[![预期输出][2]][2]
df<- structure(list(Group = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L), country = c("A", "B", "C", "A", "E", "F", "A", "E", "G"), pop = c(200L, 100L, 50L, 200L, 150L, 120L, 200L, 150L,
100L)), class = "data.frame", row.names = c(NA, -9L))
最佳答案
我认为这会做。语法说明
.init
,但在过滤了 pop
值的最大值后。purrr::reduce
这里将把小标题列表减少到一个小标题 reduce
中使用的迭代.init
用作过滤的第一组 anti_join
删除先前组中的国家/地区pop
再次bind_rows()
添加先前过滤的国家/地区df %>% group_split(Group) %>% .[-1] %>%
reduce(.init =df %>% group_split(Group) %>% .[[1]] %>%
filter(pop == max(pop)),
~ .y %>%
anti_join(.x, by = c("country" = "country")) %>%
filter(pop == max(pop)) %>%
bind_rows(.x) %>% arrange(Group))
# A tibble: 3 x 3
Group country pop
<int> <chr> <int>
1 1 A 200
2 2 E 150
3 3 G 100
关于r - 根据一列中的最大值和唯一值过滤行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67043336/