使用r和grep替换循环

时间:2018-05-06 00:26:42

标签: r function loops grepl

我不知道我做错了什么 - 但我很接近 - 我已经让它工作了一次......有人可以帮助我吗?

我正在尝试用指定的单词替换列(plik)(在这种情况下" A。",如果" dlik"中的任何单词都存在

dlik<-c("Acipenser","cyt b") #list of words to look for
plik<-c("Acipenser oxyrinchus voucher LodgeLab Aoxyrinchus_1 mitochondrion, complete genome",
"Acipenser oxyrinchus voucher LodgeLab Aoxyrinchus_1 mitochondrion, complete genome",
"Acipenser oxyrinchus desotoi mitochondrion, complete genome",
"Acipenser oxyrinchus oxyrinchus mitochondrion, complete genome",
"Acipenser oxyrinchus oxyrinchus isolate ATNNFC-0562 mitochondrion, complete genome",
"Acipenser oxyrinchus oxyrinchus isolate ATNNFC-5C29 mitochondrion, complete genome",
"Acipenser sinensis mitochondrion, complete genome",
"Acipenser sinensis mitochondrion, complete genome",
"Acipenser stellatus complete mitochondiral genome",
"Acipenser stellatus mitochondrion, complete genome",
"Acipenser sturio mitochondrion, complete genome",
"Acipenser sturio mitochondrion, complete genome",
"Polyodon spathula mitochondrial DNA, complete genome"
) #list of words to look in.

要照顾的单词列表(dlik)

  for (i in dlik){
   replace(plik,grep(i,plik),"A.")
  }

3 个答案:

答案 0 :(得分:1)

可以做得更简单。不需要循环:

sapply (strsplit(plik," "), 
        FUN=function(x){  
              if (any(x %in% dlik)) return("A") else 
                                    return (paste(x, collapse=" "))})

# [1] "A"                                                   
# [2] "A"                                                   
# [3] "A"                                                   
# [4] "A"                                                   
# [5] "A"                                                   
# [6] "A"                                                   
# [7] "A"                                                   
# [8] "A"                                                   
# [9] "A"                                                   
# [10] "A"                                                   
# [11] "A"                                                   
# [12] "A"                                                   
# [13] "Polyodon spathula mitochondrial DNA, complete genome"

答案 1 :(得分:1)

我们也可以通过paste'dlik'一起进行矢量化,在grep中使用replace'plik'中与索引匹配的元素

str1 <- paste0("\\b(", paste(dlik, collapse= "|"), ")\\b")
plik[grep(str1, plik)] <- "A."
plik
# [1] "A."                                                  
# [2] "A."                                                  
# [3] "A."                                                  
# [4] "A."                                                  
# [5] "A."                                                  
# [6] "A."                                                  
# [7] "A."                                                  
# [8] "A."                                                  
# [9] "A."                                                  
#[10] "A."                                                  
#[11] "A."                                                  
#[12] "A."                                                  
#[13] "Polyodon spathula mitochondrial DNA, complete genome"

答案 2 :(得分:0)

您需要将replace输出分配到plik

for (i in dlik){
 plik <- replace(plik,grep(i,plik),"A.")
}