R语言如何编写接受dataframe变量名为参数的自定义统计函数
解决方案
你遇到的问题是dplyr的整洁评估机制下,直接传入字符串变量名无法被函数内部的dplyr动词识别,可通过.data代词实现动态列调用,完整可运行代码如下:
完整函数代码
# 需先加载dplyr包 library(dplyr) clin <- function(data, variable_name) { # 处理目标列:转数值、NA替换为-9 data[[variable_name]] <- as.numeric(data[[variable_name]]) data[[variable_name]][is.na(data[[variable_name]])] <- -9 # 动态调用变量完成统计 res <- data %>% mutate(tot = n()) %>% mutate(rep = ifelse(.data[[variable_name]] == -9, "no_value", "value")) %>% mutate(sum_value = ifelse(rep == "value", sum(rep == "value"), tot - sum(rep == "value"))) %>% mutate(variable = variable_name) %>% select(variable, rep, sum_value) %>% distinct(rep, .keep_all = TRUE) return(res) }
调用测试
直接传入字符串形式的列名即可调用:
# 示例数据构造 data <- data.frame( V1 = c(0,25,6,"NC", 9, 10, "", "", 15), V2 = c(47,"NC",56,"NC", "", 42, "", 48, ""), V3 = c(2,5,3,4, 9,5, "", "", 2) ) # 调用函数计算V1的统计结果 clin(data, "V1")
关键逻辑说明
- 基础语法中访问动态列使用
[[运算符,替代固定列名的$运算符,即可通过字符串参数定位目标列 - dplyr动词内部通过
.data[[variable_name]]语法,即可将传入的字符串参数识别为数据框的对应列,无需额外的符号转换操作
内容的提问来源于stack exchange,提问作者Aurelia Kurtis
相关产品推荐
相关产品推荐

