【问题标题】:Function over tidyverse code results in issue with quotestidyverse 代码上的函数导致引号问题
【发布时间】:2020-07-02 06:47:06
【问题描述】:

我在应用包含 tidyverse 代码的函数时遇到的问题示例。我想重复不同的变量名,但我不确定如何“取消引用”。

示例数据:

df <- data.frame(grp=c(1,2,1,2,1), one=c(rep('a', 3), rep('b', 2)), two=c(rep('a', 1), rep('d', 4)))
cn <- colnames(df)[2:ncol(df)]

for(i in cn){
  i <- enquo(i)
  print(df %>% group_by(grp) %>% count(!!i))
}
# A tibble: 2 x 3
# Groups:   grp [2]
    grp `"one"`     n
  <dbl> <chr>   <int>
1     1 one         3
2     2 one         2
# A tibble: 2 x 3
# Groups:   grp [2]
    grp `"two"`     n
  <dbl> <chr>   <int>
1     1 two         3
2     2 two         2

对名为 one 的单个变量执行此操作;这是正确的输出。

df %>% group_by(grp) %>% count(one)
# A tibble: 4 x 3
# Groups:   grp [2]
    grp one       n
  <dbl> <fct> <int>
1     1 a         2
2     1 b         1
3     2 a         1
4     2 b         1

【问题讨论】:

    标签: r function tidyverse


    【解决方案1】:

    你可以使用map,也可以通过在count中包含grp来避免group_by

    library(dplyr)
    library(purrr)
    map(cn, ~df %>% count(grp, .data[[.x]]))
    
    #[[1]]
    #  grp one n
    #1   1   a 2
    #2   1   b 1
    #3   2   a 1
    #4   2   b 1
    
    #[[2]]
    #  grp two n
    #1   1   a 1
    #2   1   d 2
    #3   2   d 2
    

    您还可以将NSEsym 一起使用

    map(cn, ~df %>% count(grp, !!sym(.x)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 2012-06-04
      • 2013-01-03
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多