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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:28:26