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)
我会很高兴得到帮助。谢谢。
使用 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)