如何基于另一列的匹配规则为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
相关产品推荐
相关产品推荐

