Grep到R中的子集

时间:2015-01-26 09:55:38

标签: r

如何从"Gm"开始仅使用data1[,7]开始查找所有基因名称。

我尝试了data2[grep("^Gm",data2$Genes),];,但它提取了以"Gm"开头的整行。

data1[,7] <-

[1] "Ighmbp2,Mrpl21,Cpt1a,Mtl5,Gal,Ppp6r3,Gm23940,Lrp5"
[2] "Gm5852,Gm5773,Tdpoz4,Tdpoz3,Gm9116,Gm9117,Tdpoz5"
[3] "Arhgap15,Gm22867"

1 个答案:

答案 0 :(得分:3)

一个选项是将字符串(strsplit(..)拆分为,,然后在输出中提取单词(这是一个列表,因此可以使用lapply) &#34; GM&#34;使用grep。 (^ - 表示单词/字符串的开头)

 lapply(strsplit(Genes, ','), function(x) grep('^Gm', x, value=TRUE))
 #[[1]]
 #[1] "Gm23940"

 #[[2]]
 #[1] "Gm5852" "Gm5773" "Gm9116" "Gm9117"

 #[[3]]
 #[1] "Gm22867"

或者您可以从stri_extract_all

stringi提取单词
library(stringi)
stri_extract_all_regex(Genes, 'Gm[[:alnum:]]+')

或者,如果您需要它作为向量,您可以在上面的输出中使用unlist或使用gsub删除那些不以&#34; Gm&#34开头的词; (\\b(?!Gm)\\w+\\b)和,', then use扫描`。

 scan(text=gsub('\\b(?!Gm)\\w+\\b|,', ' ',
             Genes, perl=TRUE), what='', quiet=TRUE)
 #[1] "Gm23940" "Gm5852"  "Gm5773"  "Gm9116"  "Gm9117"  "Gm22867"

更新

如果您需要删除以Gm

开头的所有字词
 scan(text=gsub('\\bGm\\w+\\b|,', ' ', Genes, perl=TRUE),
                     what='', quiet=TRUE)
 # [1] "Ighmbp2"  "Mrpl21"   "Cpt1a"    "Mtl5"     "Gal"      "Ppp6r3"  
 # [7] "Lrp5"     "Tdpoz4"   "Tdpoz3"   "Tdpoz5"   "Arhgap15"

数据

Genes <- c("Ighmbp2,Mrpl21,Cpt1a,Mtl5,Gal,Ppp6r3,Gm23940,Lrp5", 
    "Gm5852,Gm5773,Tdpoz4,Tdpoz3,Gm9116,Gm9117,Tdpoz5",
    "Arhgap15,Gm22867")