r - 在循环中使用 dplyr 创建数据帧时出错
问题描述
我有一个包含所有数字变量和一个date
变量的数据框。对于每个变量VARIABLE
,我想使用以下 dplyr 代码创建一个数据框:
avg_price = full_data_noNO %>%
group_by(Month, Country) %>%
dplyr::summarize(avg = mean(VARIABLE, na.rm = TRUE))
如果我对名称进行硬编码,这可以正常工作,VARIABLE
但如果我在循环中执行此操作,则会收到警告In mean.default(data.matrix(VARIABLE), na.rm = TRUE) : argument is not numeric or logical: returning NA
。结果,我的数据框中的平均列avg_price
仅包含 NA。有谁知道如何解决这个问题?
更新:我目前有一个功能:
make_plots_expl_vars <- function (VARIABLE, full_data_noNO ) {
avg_price = full_data_noNO %>%
group_by(Month, Country) %>%
dplyr::summarize(avg = mean(VARIABLE, na.rm = TRUE))
return(avg_price)
我称之为使用例如make_plots_expl_vars("price", full_data_noNO)
。我想使用循环为我的数据框中的所有变量调用此函数,但我知道该怎么做。
解决方案
您可以使用rlang::sym
或rlang::enquo
。
与rlang::sym
:
make_plots_expl_vars <- function (VARIABLE, data=full_data_noNO) {
xx = sym(VARIABLE)
avg_price = data %>%
group_by(Month, Country) %>%
dplyr::summarize(avg = mean(!!xx, na.rm = TRUE))
return(avg_price)
}
make_plots_expl_vars("price", full_data_noNO)
make_plots_expl_vars("price") #you don't need it anymore with the "data" argument
与rlang::enquo
:
make_plots_expl_vars <- function (VARIABLE, data=full_data_noNO) {
xx = enquo(VARIABLE)
avg_price = data %>%
group_by(Month, Country) %>%
dplyr::summarize(avg = mean(!!xx, na.rm = TRUE))
return(avg_price)
}
make_plots_expl_vars(price, full_data_noNO)
不同之处在于,在一种情况下,您使用引号声明变量,而在另一种情况下不使用引号。然后,您的变量在dplyr
带有运算符的函数内部不加引号!!
。如果您想了解更多信息,可以查看quasiquotation 文档或“使用 dplyr 编程”教程。
请注意,rlang
它已经包含在其中,dplyr
因此您不必导入库。
推荐阅读
- javascript - 将数据从函数保存到全局变量
- laravel - vuejs + laravel中的路由器权限?
- python - Systemd 服务未运行 Python 脚本
- go - 尝试将 Gqlgen 与 julienschmidt/httprouter 一起使用时找不到 404 页面
- android - 应用内分享到 Instagram 故事,不适用于 Android 11 及更高版本
- powershell - Powershell 计划脚本运行不正常
- python - python中从十进制到二进制的整数的numpy arrax
- javascript - 当我尝试使用 javascript 和 HTML 制作计算器时,如何解决错误“Cannot POST /Index.html”?
- node.js - 如何在公司注册表后面安装keytar?
- spring-boot - Selenium-Grid 的 Csrf-Token 问题