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

如何基于另一列的匹配规则为DataFrame新增Sample_Type列

R语言给DataFrame添加Sample_Type列的实现方案

先给出原始数据集:

Sample <- data.frame(Sample_Name=c('502B_BCD_0TBC','0102_PER_2TBC', '0302_COR_0TBC', '0500_LN_TGHV'))

下面提供两种常用实现方式:

1. Base R 原生方法

利用grepl做字符串匹配,结合嵌套ifelse按规则生成列:

# 按规则生成Sample_Type列
Sample$Sample_Type <- ifelse(grepl('B_|_BLO', Sample$Sample_Name), 'BLO',
                             ifelse(grepl('_PER_', Sample$Sample_Name), 'PER',
                                    ifelse(grepl('_COR_', Sample$Sample_Name), 'COR',
                                           ifelse(grepl('_LN_', Sample$Sample_Name), 'LN', 'OTH'))))

grepl会检查字符串是否包含指定模式,返回布尔值;ifelse按题目给定的规则顺序依次判断,匹配到对应模式就赋值对应的类型,所有规则都不满足时设为OTH。

2. tidyverse(dplyr)方法

用dplyr的case_when处理多条件判断,代码可读性更强:

library(dplyr)

Sample <- Sample %>%
  mutate(Sample_Type = case_when(
    grepl('B_|_BLO', Sample_Name) ~ 'BLO',
    grepl('_PER_', Sample_Name) ~ 'PER',
    grepl('_COR_', Sample_Name) ~ 'COR',
    grepl('_LN_', Sample_Name) ~ 'LN',
    TRUE ~ 'OTH' # 匹配所有未满足上述条件的情况
  ))

case_when按顺序执行条件判断,只要满足某条规则就返回对应值,最后TRUE ~ 'OTH'兜底处理所有不匹配的情况。

执行完任意一种方法后,打印数据集就能看到结果:

print(Sample)

输出结果:

Sample_Name Sample_Type
1     502B_BCD_0TBC         BLO
2     0102_PER_2TBC         PER
3     0302_COR_0TBC         COR
4     0500_LN_TGHV          LN

内容的提问来源于stack exchange,提问作者John Fistikis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:54:57