gpt4 book ai didi

r - 取 dplyr 中字符串定义的变量的平均值

转载 作者:行者123 更新时间:2023-12-02 09:17:49 28 4
gpt4 key购买 nike


看起来这应该很容易,但我很困惑。我已经掌握了使用 dplyr 进行编程的大致技巧0.7,但为此苦苦挣扎:How do Iprogram in dplyr我想要编程的变量是否是一个字符串?

我正在抓取数据库,并且出于各种原因想要总结一个变量,我将知道该变量的位置但不知道其名称(我想要的始终是所提供表的第一列,但名称该列中存储的变量的大小将根据正在抓取的数据库而变化)。使用iris例如,假设我知道我想要的变量位于第一列

library(tidyverse)
desired_var <- colnames(iris)[1]
print(desired_var)
"Sepal.Length"

我现在想按 Species 分组,并取 desired_var 的平均值,即我想要执行的是

iris %>% 
group_by(Species) %>%
summarise(desired_mean = mean(Sepal.Length))

但是,现在我想取由存储在 desired_var 中的字符串定义的列的平均值。

我知道如何用“裸”来做到这一点Sepal.Length

desired_var <- quo(Sepal.Length)

iris %>%
group_by(Species) %>%
summarise(desired_mean = mean(!!desired_var))

但是我到底该如何处理我拥有 "Sepal.Length" 的事实呢?不是Sepal.Length ,即desired_var <- "Sepal.Length"

最佳答案

您想知道 tidyeval这是 tidyverse 的一个相当新的功能。 (参见 here )更多用于使用 tidyverse 创建函数功能。目前仅适用于 dplyr但计划是将其扩展到其他 tidyverse包。

不过,根据您的需要,当 summarize_at 时,您实际上并不需要参与其中。会做。此函数允许您跨您选择的任何变量扩展指定的特定操作:

iris %>% 
group_by(Species) %>%
summarise_at(vars(one_of("Sepal.Length", "Sepal.Width")), funs(desired_mean = mean))

# A tibble: 3 x 3
Species Sepal.Length_desired_mean Sepal.Width_desired_mean
<fctr> <dbl> <dbl>
1 setosa 5.006 3.428
2 versicolor 5.936 2.770
3 virginica 6.588 2.974

您可以将变量列表存储到向量中,然后使用该向量:

selected_vectors <- c("Sepal.Length", "Sepal.Width")
iris %>%
group_by(Species) %>%
summarise_at(vars(one_of(selected_vectors)), funs(desired_mean = mean))

关于r - 取 dplyr 中字符串定义的变量的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45260181/

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