如何在R中用dplyr最大化时取相应的值?

j5fpnvbx  于 2023-04-27  发布在  其他
关注(0)|答案(3)|浏览(96)

假设我在R中有以下df:
| 色谱柱_A|色谱柱B|色谱柱_C|
| --------------|--------------|--------------|
| 一个|一百|蓝色|
| 一个|三百五十|红色|
| B|五百|绿色|
| B|一百五十|黄色|
与dplyr我想分组df voor Column_A,采取的最大值的Column_B和相应的值的Column_C(所以Column_C的值,其中B =最大).我现在有以下代码:

df_new <- df %>% dplyr::group_by(Column_A) %>% 
  dplyr::summarise(
    Max_B = max(Column_B),
    Corresponding_C = which.max(Column_B))

然而,这给了Column_C错误的值,因为它说,which.max(Column_B)= 1的所有值。我如何才能改变这个代码,我得到正确的值Column_C?
非常感谢提前!

x4shl7ld

x4shl7ld1#

你能做到

df %>% group_by(Column_A) %>% slice(which.max(Column_B))

编辑:更好的是,dplyr现在有了slice_max函数

df %>% group_by(Column_A) %>% slice_max(Column_B)
yks3o0rb

yks3o0rb2#

您可以group_bysummarisemax值和颜色对应的最大值使用which.max像这样:

library(dplyr)
df %>%
  group_by(Column_A) %>%
  summarise(max_value = max(Column_B),
            Column_C = Column_C[which.max(Column_B)])
#> # A tibble: 2 × 3
#>   Column_A max_value Column_C
#>   <chr>        <int> <chr>   
#> 1 A              350 red     
#> 2 B              500 green.

创建于2023-04-21使用reprex v2.0.2

ojsjcaue

ojsjcaue3#

试试这个:

library(dplyr)
df <- data.frame(Column_A = c("A", "A", "B", "B"), 
                 Column_B = c(100, 350, 500, 150), 
                 Column_C = c("blue", "red", "green", "yellow"))

df %>%
  group_by(Column_A) %>%
  filter(Column_B == max(Column_B)) %>%
  distinct(Column_A, .keep_all = TRUE)

相关问题