【问题标题】:How to get dplyr `pull()` to recognize grouping in R? [duplicate]如何让 dplyr `pull()` 识别 R 中的分组? [复制]
【发布时间】: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$[[ 相同,此处也不需要

标签: r dplyr grouping


【解决方案1】:

你快接近了。要使用的函数是max,它在删除NAs 后提取maximum

df %>% 
group_by(col1) %>%
 mutate(col3 = max(col2, na.rm = TRUE))

# A tibble: 4 x 3
# Groups:   col1 [2]
#  col1   col2  col3
#  <chr> <dbl> <dbl>
#1 a         2     2
#2 a        NA     2
#3 b        10    10
#4 b         8    10

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    相关资源
    最近更新 更多