r - 带有 dplyr 的用户定义函数 - 变异列是一个参数
问题描述
我想在 R 中使用 dplyr 创建一个已定义的函数。但我坚持在 mutate 函数中传递参数。我有两个数据集。
数据1:
团体 | AGEGRP | 数数 |
---|---|---|
1 | 0 | 15 |
2 | 1 | 20 |
数据2:
团体 | 数数 |
---|---|
3 | 15 |
我的功能是
freqcnt <- function(var) {
var <- enquo(var)
data2 <- data2 %>%
mutate(!!var = 99)
data1 <- data1 %>%
rbind(data2) %>%
return()
}
当我运行以下代码时,
df <- freqcnt(AGEGRP)
弹出错误消息。
Error: unexpected '=' in:
"
mutate(!!var ="
但是,如果我删除 !!,那么 var 将成为变量的名称,而不是 AGEGRP。请给我看一些灯。谢谢,
解决方案
这是对您的功能的修复。
library(dplyr)
freqcnt <- function(var){
data2 <- data2 %>%
mutate({{var}} := 99)
data1 <- data1 %>%
rbind(data2)
return(data1)
}
freqcnt("AGEGRP")
# GROUP AGEGRP COUNT
# 1 1 0 15
# 2 2 1 20
# 3 3 99 15
顺便说一句,由于您使用的是dplyr
. 我建议您可以使用该bind_rows
功能而不是rbind
. 它可以将具有不同列名的数据框组合起来,留下那些不匹配的列NA
。下面是我提出的一个功能。您不再需要指定列名。此外,我将它设计为能够将参数fill
作为值来填充不匹配的列。
freqcnt2 <- function(fill){
data1 <- data1 %>%
bind_rows(data2) %>%
mutate(across(.fns = function(x) ifelse(is.na(x), fill, x)))
return(data1)
}
freqcnt2(99)
# GROUP AGEGRP COUNT
# 1 1 0 15
# 2 2 1 20
# 3 3 99 15
数据
data1 <- data.frame(GROUP = 1:2,
AGEGRP = 0:1,
COUNT = c(15,20))
data2 <- data.frame(GROUP = 3, COUNT = 15)
推荐阅读
- azure - Azure 表存储检索操作为非空值返回空值
- python - 如何将一个脚本中的可滚动框架导入到不同脚本 tkinter 中的框架中
- javascript - 防止滚动位置在 ajax 刷新时置顶
- python - 重新启动运行时后模型加载得到不同的结果
- json - pandas to_json , django 和 d3.js 用于可视化
- oracle - Oracle v19:正在进行的事务可以长时间阻止对相关表的并发删除吗?
- javascript - 如何通过formdata将值附加到模型中对象内的嵌套键
- c# - 如何在 Index.razor 页面上为 Blazor 使用谷歌字体
- php - Wordpress:PHP 警告:sprintf():参数太少
- reactjs - 更改 Material UI 的自动完成组件时如何获取特定值