【发布时间】:2019-10-28 13:59:05
【问题描述】:
library(tidyverse)
df <- tibble(col1 = c("a", "a", "b", "b"),
col2 = c(2, NA, 10, 8))
#> # A tibble: 4 x 2
#> col1 col2
#> <chr> <dbl>
#> 1 a 2
#> 2 a NA
#> 3 b 10
#> 4 b 8
我有上面的数据框,我想在上面执行以下逻辑:
- 按
col1分组 - 使用此
col1分组确定最大的col2值 - 将此最大的
col2值填充为col3值,用于所述分组
你最终得到的是下面的数据框。
#> # A tibble: 4 x 3
#> col1 col2 col3
#> <chr> <dbl> <dbl>
#> 1 a 2 2
#> 2 a NA 2
#> 3 b 10 10
#> 4 b 8 10
我对代码的尝试如下,我知道它不起作用,因为我的dplyr::pull() 不是(由我编写的)以它获得我想要的分组逻辑的方式编写的。如何让dplyr::pull() 识别我想要的分组,或者有更好的方法来解决我的问题。
df %>%
group_by(col1) %>%
mutate(col3 = top_n(., 1, col2) %>% pull(col2))
#> # A tibble: 4 x 3
#> # Groups: col1 [2]
#> col1 col2 col3
#> <chr> <dbl> <dbl>
#> 1 a 2 2
#> 2 a NA 10
#> 3 b 10 2
#> 4 b 8 10
【问题讨论】:
-
我认为你会因为尝试在基本函数就足够的地方使用
dplyr函数而搞砸了。top_n返回一个数据框——如果您只需要col2的第一个最大值,为什么不只是max(col2)?pull与$或[[相同,此处也不需要