在R语言中为含Sname的列按指定规则赋值
R语言实现指定列的分组替换
需求说明
针对列名包含"Sname"的列,按以下规则替换值:
- 所有与"Orange"相关的变体(如Orangee、ORANGE、ornage等)归为组1
- 值为"A"或"B"的归为组2
- 其余值归为组3
实现代码(推荐dplyr方式)
先确保安装并加载dplyr包,然后批量处理目标列:
# 若未安装dplyr,先执行安装 # install.packages("dplyr") library(dplyr) # 原始数据集 df <- data.frame(id = paste0("ID",1:4), Sname1 = c("Apple", "Orangee", "ORANGE", "ornage"), Sname2 = c("Apple", "Orangee", "ORANGE", "ornage"), "6Sname3" = c("Apple", "Orangee", "ORANGE", "ornage"), other = LETTERS[1:4]) # 批量处理含"Sname"的列 df_processed <- df %>% mutate(across(matches("Sname"), ~case_when( # 模糊匹配Orange变体(兼容大小写、拼写小错误) agrep("orange", ., ignore.case = TRUE) ~ "组1", # 匹配值为A/B的情况 . %in% c("A", "B") ~ "组2", # 其余情况归为组3 TRUE ~ "组3" ))) # 查看结果 print(df_processed)
基础R实现方式
如果不想用dplyr,也可以用基础R完成:
# 筛选列名含"Sname"的列索引 sname_cols <- grep("Sname", colnames(df), ignore.case = TRUE) # 循环处理每一列 for(col in sname_cols){ df[[col]] <- dplyr::case_when( agrep("orange", df[[col]], ignore.case = TRUE) ~ "组1", df[[col]] %in% c("A", "B") ~ "组2", TRUE ~ "组3" ) }
可选调整
如果仅需要匹配大小写不同的"Orange"(不兼容拼写错误如ornage),可将agrep替换为grepl:
grepl("orange", ., ignore.case = TRUE) ~ "组1"
内容的提问来源于stack exchange,提问作者NoobR
相关产品推荐
相关产品推荐

