【问题标题】:Using strings in functions in dplyr在 dplyr 的函数中使用字符串
【发布时间】:2020-10-19 01:32:23
【问题描述】:

当我想在 dplyr 函数中使用字符串时,使用拥抱运算符 {{ }} 并没有达到预期的效果。

例如,假设我想以编程方式将在 data.frame 的名称中找到的变量 group_by

library(tidyverse)
library(palmerpenguins)

palmerpenguins::penguins %>% 
  select(c(1, 2, 8)) %>% 
  names %>% 
  map(
    function(i)
      penguins %>%
        group_by({{ i }}) %>% 
        tally
  )

返回

[[1]]
# A tibble: 1 x 2
  `"species"`     n
  <chr>       <int>
1 species       344

[[2]]
# A tibble: 1 x 2
  `"island"`     n
  <chr>      <int>
1 island       344

但我想将group_by的变量名传递给map

【问题讨论】:

    标签: r dplyr rlang


    【解决方案1】:

    {{}} 运算符不适用于字符串,而是用于符号。使用字符串,您可以这样做

    palmerpenguins::penguins %>% 
      select(c(1, 2, 8)) %>% 
      names %>% 
      map(
        function(i)
          penguins %>%
          group_by(!!rlang::sym(i)) %>% 
          tally
      )
    
    

    palmerpenguins::penguins %>% 
      select(c(1, 2, 8)) %>% 
      names %>% 
      map(
        function(i)
          penguins %>%
          group_by(.data[[i]]) %>% 
          tally
      )
    

    后者是 tidyverse 作者目前首选的方法。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多