r - 在 R 中使用 dplyr 进行非标准评估 (NSE)
问题描述
我正在尝试编写一个函数来创建汇总表。我有兴趣总结的变量可能会改变,因此,我想将它放在一个函数中。我按照关于 NSE 的dpylr 小插图中的示例进行操作,但由于某种原因它对我不起作用。这是功能:
print(agegroup) # this is a string
table_summary <- function (data, group_by1){
quo_group_by1 = quo(group_by1)
print(quo_group_by1)
data %>%
dplyr::group_by(!! quo_group_by1) %>%
dplyr::summarise(N = n()) %>%
dplyr::mutate(pct = paste0((round(N/sum(N)*100, 2))," %"))
}
table_summary(clientData, agegroup)
我收到以下错误:
[1] "ag5"
<quosure>
expr: ^group_by1
env: 0x7faaec29e030
Error: Column `group_by1` is unknown
我怎样才能解决这个问题?
解决方案
{{}}
您应该使用避免quo
&的 curly-curly ( ) !!
。您也可以使用count
which 是group_by
+的快捷方式summarise
。
table_summary <- function (data, group_by1){
data %>%
dplyr::count({{group_by1}}) %>%
dplyr::mutate(pct = paste0((round(N/sum(N)*100, 2))," %"))
}
table_summary(clientData, agegroup)
它似乎agegroup
是一个字符串。要继续使用 OP 的方法,我们需要将其转换为符号 ( sym
) 并评估它 ( !!
)
table_summary <- function (data, group_by1){
data %>%
dplyr::group_by(!!sym(group_by1)) %>%
dplyr::summarise(N = n()) %>%
dplyr::mutate(pct = paste0((round(N/sum(N)*100, 2))," %"))
}
推荐阅读
- c# - 如何修复 Basler AviWriter 性能低下的问题
- vue.js - 如何通过在 VueJS 中单击来刷新画布?
- perl - 列只能在创建它们的组中隐藏
- javascript - 如何在 TinyMCE 中以编程方式合并表格单元格?
- ios - 如何避免堆栈视图将其内容动画显示到底部?
- c# - 如果在 c# 中运行 sql 脚本时遇到 sql 异常,如何获取受影响的行数
- vue.js - 如何检查表单是否有效并禁用 vuejs2 中的提交按钮?
- c# - 我是否必须在每个剃须刀页面模型中调用数据库?
- javascript - Nuxt JS 中的基本身份验证
- macos - 回显具有浮点值的变量