在R语言中提取组蛋白标记并创建新列(禁用正则表达式)
不用正则表达式提取R语言数据框中的组蛋白标记
首先还原你的数据:
try <- data.frame( histones = c( "encode3Ren_limb_H3K27me3_E10", "encode3Ren_facial_prominence_H3K27me3_E10", "encode3Ren_liver_H3K27me3_E12", "encode3Ren_neural_tube_H3K27me3_E14", "encode3Ren_neural_tube_H3K4me1_E12", "encode3Ren_neural_tube_H3K27me3_E11", "encode3Ren_neural_tube_H3K4me1_E15", "encode3Ren_neural_tube_H3K4me2_E13" ), a = c(1,2,3,4,5,6,7,8) )
基础R实现方法
利用字符串拆分和前缀匹配完成提取,全程不涉及正则表达式:
# 将每个histones字符串按下划线拆分为列表 split_strings <- strsplit(try$histones, "_") # 遍历拆分后的列表,筛选出以"H3K"开头的片段作为新列 try$histone_mark <- sapply(split_strings, function(x) x[startsWith(x, "H3K")])
tidyverse风格实现方法
如果习惯用tidyverse工具链,也可以这样写:
library(tidyverse) try <- try %>% mutate(histone_mark = map_chr(str_split(histones, "_"), ~ .x[startsWith(.x, "H3K")]))
最终结果
运行代码后,数据框会新增histone_mark列,结果如下:
print(try) # histones a histone_mark # 1 encode3Ren_limb_H3K27me3_E10 1 H3K27me3 # 2 encode3Ren_facial_prominence_H3K27me3_E10 2 H3K27me3 # 3 encode3Ren_liver_H3K27me3_E12 3 H3K27me3 # 4 encode3Ren_neural_tube_H3K27me3_E14 4 H3K27me3 # 5 encode3Ren_neural_tube_H3K4me1_E12 5 H3K4me1 # 6 encode3Ren_neural_tube_H3K27me3_E11 6 H3K27me3 # 7 encode3Ren_neural_tube_H3K4me1_E15 7 H3K4me1 # 8 encode3Ren_neural_tube_H3K4me2_E13 8 H3K4me2
内容的提问来源于stack exchange,提问作者jonny jeep
相关产品推荐
相关产品推荐

