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

标签 r max tidyverse dplyr

<分区>

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

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

我想在每组 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

我很乐意提供帮助。谢谢。

最佳答案

使用 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

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

关于r - 使用 Dplyr 查找组的最大值并在同一表的另一列中改变结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59691226/

相关文章:

mysql - 使用 MAX 函数时从表中获取字段

MySQL 仅更新 WHERE max()

R dplyr 总结错误?

使用 RSript 运行 R 脚本似乎不会保存工作空间

r - 向量的最小和最大连续值

r - `dplyr::case_when` 不要给我正确的结果

r - 使用 tidyverse 工具展平从关系数据库派生的嵌套列表的最佳方法是什么?

r - 将列值转换为 R 中的日期

r - BASH : oauth_listener() needs an interactive environment 中的错误

html - 我如何在 R markdown 中分隔子选项卡或(嵌套选项卡)而不是并排显示它们?