【发布时间】:2020-06-11 13:51:56
【问题描述】:
我在使用tidyverse变异数据框时遇到过滤问题:
sample.df <- data.frame(
group = c("A", "A", "A", "B", "B", "C"),
value = c(1,2,3,4,5,6)
)
mutated.sample.df <- sample.df %>%
dplyr::group_by(group) %>%
dplyr::mutate(group_count = n())
non.desired.df <- mutated.sample.df %>%
dplyr::filter(group_count == max(group_count)) %>%
dplyr::select(-group_count)
这会返回一个不需要的解决方案,因为没有应用过滤器:
group value
<fct> <dbl>
1 A 1
2 A 2
3 A 3
4 B 4
5 B 5
6 C 6
另一方面,直接使用总结过滤器被正确应用:
summarized.sample.df <- sample.df %>%
dplyr::group_by(group) %>%
dplyr::summarise(group_count = n()) %>%
dplyr::filter(group_count == max(group_count))
给予:
group group_count
<fct> <int>
1 A 3
我现在可以过滤原始数据框并获得我想要的 df:
desired.df <- sample.df %>%
dplyr::filter(group %in% summarized.sample.df$group)
即:
group value
<fct> <dbl>
1 A 1
2 A 2
3 A 3
我在 mutating 行为中遗漏了什么?我可以只过滤“硬编码”值:
my.max <- max(mutated.sample.df$group_count)
desired.df <- mutated.sample.df %>%
dplyr::filter(group_count == my.max) %>%
dplyr::select(-group_count)
是否有可能在一个管道中获得所需的.df?在总结和变异 hard 计算 max 我不能。
我希望这会起作用,但事实并非如此。任何提示为什么?
mutated.sample.df <- sample.df %>%
dplyr::group_by(group) %>%
dplyr::mutate(group_count = n()) %>%
dplyr::filter(group_count == max(group_count)) %>%
dplyr::select(-group_count)
谢谢
【问题讨论】: