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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:35:28