在R语言中提取逗号间含ENS的字符串并新增列的方法
提取含指定字符串的逗号分隔子串方法
这里有几种实用的实现方法,帮你给数据框新增列B:
方法一:Base R原生实现(无需额外包)
直接用原生函数组合搞定,不用装额外包:
df$B <- sapply(strsplit(df$A, ","), function(x) x[grepl("ENS", x)])
逻辑很直白:先用strsplit把每行的A列按逗号拆成字符向量,再用grepl找出向量里包含"ENS"的元素,最后通过sapply把结果整合回数据框。
方法二:tidyverse工具链(代码更直观)
借助dplyr和stringr的组合,用匹配提取一步到位:
library(dplyr) library(stringr) df <- df %>% mutate(B = str_extract(A, "[^,]*ENS[^,]*"))
str_extract的匹配模式[^,]*ENS[^,]*意思是:匹配所有不包含逗号、且中间带有"ENS"的子串,刚好对应你要的逗号分隔单元。
方法三:拆分-过滤-合并(适合多匹配场景)
如果某行可能存在多个含"ENS"的子串,这种方法更灵活:
library(tidyr) library(dplyr) df <- df %>% mutate(row_id = row_number()) %>% # 给每行加唯一标识 separate_rows(A, sep = ",") %>% # 把逗号分隔的内容拆成多行 filter(grepl("ENS", A)) %>% # 筛选含"ENS"的行 select(row_id, B = A) %>% # 重命名列并保留行标识 right_join(df %>% mutate(row_id = row_number()), by = "row_id") %>% # 合并回原数据框 select(-row_id) # 移除临时行标识
这种方法步骤稍多,但能处理一行多个匹配结果的情况,结果会自动按行对齐。
内容的提问来源于stack exchange,提问作者Gabriel G.
相关产品推荐
相关产品推荐

