首页 > 解决方案 > 从列中提取模式并在 R 数据框中创建一个新模式

问题描述

我有以下 R DataFrame

  x                                                                                          y
1 1               "gene_biotype "lincRNA"; gene_id "ENSG00000224818"; gene_name "RP11-134G8.8"
2 2 "gene_biotype "processed_transcript"; gene_id "ENSG00000261067"; gene_name "RP11-264B17.3"
3 3 "gene_biotype "processed_transcript"; gene_id "ENSG00000261067"; gene_name "RP11-264B17.3"

我想gene_id从每一行中提取并制作如下所示的新列,

  x               y
1 1 ENSG00000224818
2 2 ENSG00000261067
3 3 ENSG00000261067

我试过sapply(strsplit(dat$y, 'gene_id \"'), "[", 2)了,但这只是删除了前面的模式。我应该如何删除后续模式并提取gene_id

可以使用以下方法复制数据帧

x <- c(1:3)
y <- c('"gene_biotype \"lincRNA\"; gene_id \"ENSG00000224818\"; gene_name \"RP11-134G8.8\"',
       '"gene_biotype \"processed_transcript\"; gene_id \"ENSG00000261067\"; gene_name \"RP11-264B17.3\"',
       '"gene_biotype \"processed_transcript\"; gene_id \"ENSG00000261067\"; gene_name \"RP11-264B17.3\"')
dat <- data.frame(x,y)
dat

标签: rregex

解决方案


您可以在 之后提取单词"gene_id"

dat$y <- sub('.*gene_id\\s"(\\w+)";.*', '\\1', dat$y)
dat

#  x               y
#1 1 ENSG00000224818
#2 2 ENSG00000261067
#3 3 ENSG00000261067

推荐阅读