R dplyr : calling `count()` with variable name (now that `count_()` is deprecated)

标签 r dplyr

我正在尝试使用 dplyrcount()使用动态变量名而不是列名。以前,我会使用 count_() ,但现在已弃用。什么是最好的替代品?

最小可重现示例:

library(dplyr)
df <- data.frame(id = 1:10, city = sample(c("London","Paris","Amsterdam"), 10, replace=TRUE))
colname <- "city"

这是我尝试过的:
df %>% count( city )  # desired output (works but isn't dynamic)
df %>% count( !!colname )  # doesn't work, makes it literally "city"
df %>% count( vars(colname) )  # doesn't work
df %>% count( eval(colname) )  # doesn't work either
df %>% count( eval(parse(text=colname)) )  # works, but is not 'dplyr' ?
df %>% count( eval(sym(colname)) )  # works, but using `sym` from 'rlang'
df %>% count( !!as.name(colname) )  # works, but using `as.name` from 'base'
df %>% count_( colname )  # works, but is deprecated

不确定上述任何一种方法是首选方法,还是完全不同的方法?

提前致谢!

附注。我找到了 as.name()解决方案 here .

最佳答案

development version of dplyr , 其中 will soon be released在 CRAN 版本 1.0 上,across function 似乎是合适的选择:

df %>% count(across(colname))

dplyr 的当前 CRAN 版本中, group_by_at()函数可以接受一个字符串,所以你可以这样做:
df %>% group_by_at(colname) %>% tally

如果有 count_at便利功能,自然的类似事情是:
df %>% count_at(colname)

但是dplyr没有 count_at函数,所以不起作用。
group_by_at当与 vars 一起使用时,还可以处理字符串和名称的混合。 ,所以你可以这样做:
colname = "cyl"
mtcars %>% group_by_at(vars(colname, vs)) %>% tally
group_by_at将继续在 dplyr 工作1.0,因此您可以创建自己的 count_at功能,如果你愿意。这将适用于字符串、名称,甚至两者的混合:
count_at = function(data, ...) {
  data %>% group_by_at(vars(...)) %>% tally
}

colname="city"
df %>% count_at(colname)

  city          n
* <fct>     <int>
1 Amsterdam     3
2 London        3
3 Paris         4

mtcars %>% count_at("cyl", vs)

    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

关于R dplyr : calling `count()` with variable name (now that `count_()` is deprecated),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61735329/

相关文章:

r - 使用ggplot获取带有百分比标签的条形图的最有效方法

r - xaringan:带有嵌套格式代码的生成表

r - 如何使用 R 以编程方式将多个表包含到 Sweave 文档中

r - 错误 : 'set_envvar' is not an exported object from 'namespace:xfun'

使用 dplyr 将列表重新组织为数据框

r - 使用 dplyr 动态创建列

r - 如何使用 dplyr 或 ggplot 绘制连续参数的中值?

r - 需要带有 GREP 的 R 代码从包含特殊字符的字符串中提取数字

r - plyr 包在多列上编写相同的函数

r - 收集列而不重复