使用 Dplyr 查找组的最大值并在同一表的另一列中改变结果

Wil*_*iam 3 r max dplyr tidyverse

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

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

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

df %>% group_by(a) %>% summarise_all(list(~ max(.)))
Run Code Online (Sandbox Code Playgroud)

其产生:

# A tibble: 3 x 2
  a         b
  <chr> <dbl>
1 a       0.2
2 b       0.5
3 c       0.8
Run Code Online (Sandbox Code Playgroud)

但这不是我想要的。我想要一个保留原始数据的表,但有一个附加列,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

Run Code Online (Sandbox Code Playgroud)

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

mrh*_*ann 7

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

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
Run Code Online (Sandbox Code Playgroud)

由reprex 包于 2020 年 1 月 10 日创建(v0.3.0)