如何用R批量修改title_1至title_100等多列的指定值?
批量替换R数据框中多列的分类值
先确认你的示例数据框:
df <- data.frame(id=c(1,1,3,4,5,6,7), title_1=c("H","M","","M","L","L","H"), title_2=c("M","M","","L","L","L","H"), title_3=c("H","H","M","L","","M","M"))
针对你需要批量处理所有title_开头列的需求,提供两种常用解决方案:
方法一:使用dplyr(tidyverse生态)
dplyr的across()函数可以轻松批量选择列并应用操作,代码简洁易读:
library(dplyr) # 方案1:用case_match做匹配替换 df_processed <- df %>% mutate(across(starts_with("title_"), ~ case_match(., "" ~ 0, "H" ~ 3, "M" ~ 2, "L" ~ 1))) # 方案2:用recode做键值对替换,更简洁 df_processed <- df %>% mutate(across(starts_with("title_"), ~ recode(., "" = 0, "H" = 3, "M" = 2, "L" = 1)))
方法二:使用Base R(无需额外安装包)
如果不想加载第三方包,可以用Base R的批量处理方式:
# 筛选所有以title_开头的列的索引 title_cols <- grep("^title_", names(df)) # 定义替换规则的键值对 replace_map <- c("" = 0, "H" = 3, "M" = 2, "L" = 1) # 批量替换并转换为数值型 df_processed_base <- df df_processed_base[title_cols] <- lapply(df_processed_base[title_cols], function(col) { # 按替换规则映射,再转数值 as.numeric(replace_map[col]) })
两种方法都能实现批量替换,根据你的使用习惯选择即可。
内容的提问来源于stack exchange,提问作者Lee
相关产品推荐
相关产品推荐

