You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R函数中用dplyr对指定列仅保留特定值其余重编码的问题

R自定义函数实现指定列值重编码方案

原有代码错误原因

  1. recode()的第一个参数直接传入col_name会被识别为普通字符串,而非数据框中的对应列,需要用{{ }}(双大括号运算符)捕获用户传入的未加引号的列名
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:24:01