R函数中用dplyr对指定列仅保留特定值其余重编码的问题
R自定义函数实现指定列值重编码方案
原有代码错误原因
recode()的第一个参数直接传入col_name会被识别为普通字符串,而非数据框中的对应列,需要用{{ }}(双大括号运算符)捕获用户传入的未加引号的列名mutate中动态列名赋值需要配合:=运算符才能正确识别glue语法的动态列名
正确实现代码
版本1:recode实现(兼容因子类型列)
library(dplyr) select_data <- function(df, col_name, do_not_change){ df %>% mutate({{col_name}} := recode({{col_name}}, !!do_not_change := do_not_change, .default = "rest")) }
版本2:if_else实现(逻辑更直观易修改)
library(dplyr) select_data <- function(df, col_name, do_not_change){ df %>% mutate({{col_name}} := if_else({{col_name}} == do_not_change, do_not_change, "rest")) }
调用测试
调用方式和预期完全一致,测试用例如下:
# 构造测试数据 test_df <- tibble( education = c("bachelor", "master", "high school", "bachelor"), gender = c("male", "female", "male", "female") ) # 教育程度场景 education_df <- select_data(test_df, education, 'bachelor') # 输出education列:"bachelor" "rest" "rest" "bachelor" # 性别场景 gender_df <- select_data(test_df, gender, 'male') # 输出gender列:"male" "rest" "male" "rest"
内容的提问来源于stack exchange,提问作者Tom McDonald
相关产品推荐
相关产品推荐

