作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 dplyr
的 count()
使用动态变量名而不是列名。以前,我会使用 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/
我正在尝试使用 dplyr的 count()使用动态变量名而不是列名。以前,我会使用 count_() ,但现在已弃用。什么是最好的替代品? 最小可重现示例: library(dplyr) df %
我正在尝试编写一个使用 dplyr 计算 z 的所有唯一值的函数。当我有实际命名为 z 的变量时,我的函数工作正常。但是,如果变量名为 x,则会出现错误(在代码下方)。 test.data%
我是一名优秀的程序员,十分优秀!