首页 > 解决方案 > 使用 Dplyr 查找组的最大值并在同一个表的另一列中改变结果

问题描述

我正在使用具有数千行和多列的庞大数据集。我想使用 Dplyr 在列中查找组的最大值,并在同一个表的另一列中改变结果。这是我的数据示例:

df <- tibble(a = rep(letters[1:3], each = 3), b = seq(0.1,0.9, length.out = 9))

我想在每组 column 中找到最大值a。我知道我可以使用以下代码在表格中的每个组中显示最大值:

df %>% group_by(a) %>% summarise_all(list(~ max(.)))

产生:

# A tibble: 3 x 2
  a         b
  <chr> <dbl>
1 a       0.2
2 b       0.5
3 c       0.8

但这不是我想要的。我想要一个保留原始数据的表,但有一个附加列c,以便列中的每个值将在列b中具有相应的值,该值显示列中每个数据点所属c的每个组中的最大值。b我想要的结果如下:

# A tibble: 9 x 3
  a         b     c
  <chr> <dbl> <dbl>
1 a       0.1   0.3
2 a       0.2   0.3
3 a       0.3   0.3
4 b       0.4   0.6
5 b       0.5   0.6
6 b       0.6   0.6
7 c       0.7   0.9
8 c       0.8   0.9
9 c       0.9   0.9

我会很高兴得到帮助。谢谢。

标签: rmaxtidyversedplyr

解决方案


使用 mutate 而不是 summarise 应该保留所有数据。

library(dplyr)

df <- tibble(a = rep(letters[1:3], each = 3), b = seq(0.1,0.9, length.out = 9))

df %>% 
  group_by(a) %>% 
  mutate(group_max = max(b)) %>% 
  ungroup()

#> # A tibble: 9 x 3
#>   a         b group_max
#>   <chr> <dbl>     <dbl>
#> 1 a       0.1       0.3
#> 2 a       0.2       0.3
#> 3 a       0.3       0.3
#> 4 b       0.4       0.6
#> 5 b       0.5       0.6
#> 6 b       0.6       0.6
#> 7 c       0.7       0.9
#> 8 c       0.8       0.9
#> 9 c       0.9       0.9

reprex 包于 2020-01-10 创建(v0.3.0)


推荐阅读