如何将字符向量传递给dplyr::count()
。
library(magrittr)
variables <- c("cyl", "vs")
mtcars %>%
dplyr::count_(variables)
这很好,但是dplyr v0.8发出警告:
count_()已过时。 请改为使用count()
“编程”小插图或tidyeval书可以帮助您 用count()编程:https://tidyeval.tidyverse.org
我没有在https://tidyeval.tidyverse.org/dplyr.html和tidyeval book的当前版本的Programming with dplyr或其他章节中看到引号或dplyr::count()
的标准评估示例。
阅读完本文档后,我的两个最佳猜测是another SO question
mtcars %>%
dplyr::count(!!variables)
mtcars %>%
dplyr::count(!!rlang::sym(variables))
会抛出这两个错误:
错误:列
<chr>
的长度必须为32(行数)或一个, 不是2错误:只能将字符串转换为符号
答案 0 :(得分:3)
要从字符串创建符号列表,您需要rlang::syms
(而不是rlang::sym
)。要取消引用列表或向量,请使用!!!
(而不是!!
)。以下将起作用:
library(magrittr)
variables <- c("cyl", "vs")
vars_sym <- rlang::syms(variables)
vars_sym
#> [[1]]
#> cyl
#>
#> [[2]]
#> vs
mtcars %>%
dplyr::count(!!! vars_sym)
#> # A tibble: 5 x 3
#> cyl vs n
#> <dbl> <dbl> <int>
#> 1 4 0 1
#> 2 4 1 10
#> 3 6 0 3
#> 4 6 1 4
#> 5 8 0 14
答案 1 :(得分:0)
也许您可以尝试
mtcars %>%
group_by(cyl, vs) %>%
tally()
这给
# A tibble: 5 x 3
# Groups: cyl [3]
cyl vs n
<dbl> <dbl> <int>
1 4 0 1
2 4 1 10
3 6 0 3
4 6 1 4
5 8 0 14