我发现这个问题已经问了,但没有适当的答案。R在dplyr中的summary函数中使用变量列名称
我想计算两个列均值之间的差,但是列名应该由变量提供...到目前为止,我只找到了as.name
将列名提供为文本的函数,但是这在这里不起作用...
使用修复列名称可以正常工作。
x <- c('a','b')
df <- group_by(data.frame(a=c(1,2,3,4), b=c(2,3,4,5), c=c(1,1,2,2)), c)
df %>% summarise(mean(a) - mean(b))
对于可变列,它不起作用
df %>% summarise(mean(x[1]) - mean(x[2]))
df %>% summarise(mean(as.name(x[1])) - mean(as.name(x[2])))
由于这个问题已经在3年前提出并且dplyr
正在良好的开发中,所以我想知道现在是否对此有答案。
您可以使用base::get
:
df %>% summarise(mean(get(x[1])) - mean(get(x[2])))
# # A tibble: 2 x 2
# c `mean(a) - mean(b)`
# <dbl> <dbl>
# 1 1 -1
# 2 2 -1
get
将默认在当前环境中搜索。
如错误消息所述,mean
期望一个逻辑或数字对象,as.name
返回一个名称:
class(as.name("a")) # [1] "name"
您可以评估自己的名字,这样也可以:
df %>% summarise(mean(eval(as.name(x[1]))) - mean(eval(as.name(x[2]))))
# # A tibble: 2 x 2
# c `mean(eval(as.name(x[1]))) - mean(eval(as.name(x[2])))`
# <dbl> <dbl>
# 1 1 -1
# 2 2 -1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句