在 dplyr 的其他列上总结所有使用的内容
Summarise all using which on other column in dplyr
出于某种原因,我找不到使用 summarise_all 函数解决以下问题的解决方案:
df <- data.frame(A = c(1,2,2,3,3,3,4,4), B = 1:8, C = 8:1, D = c(1,2,3,1,2,5,10,9))
期望的结果:
df %>%
group_by(A) %>%
summarise(B = B[which.min(D)],
C = C[which.min(D)],
D = D[which.min(D)])
# A tibble: 4 x 4
A B C D
<dbl> <int> <int> <dbl>
1 1 1 8 1
2 2 2 7 2
3 3 4 5 1
4 4 8 1 9
我尝试了什么:
df %>%
group_by(A) %>%
summarise_all(.[which.min(D)])
换句话说,我想按一个变量分组,并为每一列找到属于另一列的最小值的值。我无法使用 summarise_all 找到解决方案。我正在寻找 dplyr 方法。
对于 A
的每个级别,您可以只过滤到具有最小值 D
的行。下面的代码假定每一组中只有一个最小行。
df %>%
group_by(A) %>%
arrange(D) %>%
slice(1)
A B C D
1 1 1 8 1
2 2 2 7 2
3 3 4 5 1
4 4 8 1 9
如果可以有多行最小值 D
,则:
df <- data.frame(A = c(1,2,2,3,3,3,4,4), B = 1:8, C = 8:1, D = c(1,2,3,1,2,5,9,9))
df %>%
group_by(A) %>%
filter(D == min(D))
A B C D
1 1 1 8 1
2 2 2 7 2
3 3 4 5 1
4 4 7 2 9
5 4 8 1 9
您需要 filter
- 每当您尝试删除一些行并保留其他行时,这就是您想要的动词。
df %>% group_by(A) %>% filter(D == min(D))
#> # A tibble: 4 x 4
#> # Groups: A [4]
#> A B C D
#> <dbl> <int> <int> <dbl>
#> 1 1 1 8 1
#> 2 2 2 7 2
#> 3 3 4 5 1
#> 4 4 8 1 9
出于某种原因,我找不到使用 summarise_all 函数解决以下问题的解决方案:
df <- data.frame(A = c(1,2,2,3,3,3,4,4), B = 1:8, C = 8:1, D = c(1,2,3,1,2,5,10,9))
期望的结果:
df %>%
group_by(A) %>%
summarise(B = B[which.min(D)],
C = C[which.min(D)],
D = D[which.min(D)])
# A tibble: 4 x 4
A B C D
<dbl> <int> <int> <dbl>
1 1 1 8 1
2 2 2 7 2
3 3 4 5 1
4 4 8 1 9
我尝试了什么:
df %>%
group_by(A) %>%
summarise_all(.[which.min(D)])
换句话说,我想按一个变量分组,并为每一列找到属于另一列的最小值的值。我无法使用 summarise_all 找到解决方案。我正在寻找 dplyr 方法。
对于 A
的每个级别,您可以只过滤到具有最小值 D
的行。下面的代码假定每一组中只有一个最小行。
df %>%
group_by(A) %>%
arrange(D) %>%
slice(1)
A B C D 1 1 1 8 1 2 2 2 7 2 3 3 4 5 1 4 4 8 1 9
如果可以有多行最小值 D
,则:
df <- data.frame(A = c(1,2,2,3,3,3,4,4), B = 1:8, C = 8:1, D = c(1,2,3,1,2,5,9,9))
df %>%
group_by(A) %>%
filter(D == min(D))
A B C D 1 1 1 8 1 2 2 2 7 2 3 3 4 5 1 4 4 7 2 9 5 4 8 1 9
您需要 filter
- 每当您尝试删除一些行并保留其他行时,这就是您想要的动词。
df %>% group_by(A) %>% filter(D == min(D))
#> # A tibble: 4 x 4
#> # Groups: A [4]
#> A B C D
#> <dbl> <int> <int> <dbl>
#> 1 1 1 8 1
#> 2 2 2 7 2
#> 3 3 4 5 1
#> 4 4 8 1 9