gpt4 book ai didi

r - 在 dplyr 中使用变量列名总结

转载 作者:行者123 更新时间:2023-12-02 04:47:10 26 4
gpt4 key购买 nike

我发现这个问题已经被问到但没有正确的答案。 R using variable column names in summarise function in dplyr

我想计算两列平均值之间的差异,但列名应该由变量提供...到目前为止,我只找到函数 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

关于r - 在 dplyr 中使用变量列名总结,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31979189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com