2013-05-21 25 views
1

我是新來的R和,有一些問題的循環和grepl功能 我有類似的數據:如何使用grepl函數的變量的內環路-R

str(peptidesFilter) 
    'data.frame': 78389 obs. of 130 variables: 
$ Sequence      : chr "AAAAAIGGR" "AAAAAIGGRPNYYGNEGGR" "AAAAASSNPGGGPEMVR" "AAAAAVGGR" ... 
$ First.amino.acid    : chr "A" "A" "A" "A" ... 
$ Protein.group.IDs    : chr "1" "1;2;4" "2;5 "3" "4;80" ... 

我想過濾使用下面

peptidesFilter.new <- peptidesFilter[grepl('(^|;)2($|;)', 
peptidesFilter$Protein.group.IDs),] 

grepl函數的數據根據​​$ Protein.group.IDs我想與每一個人的數據的循環(如1,2,3,等...) 並重新做 - 包含變量肽的數據幀的名稱FilterFilter.i

i =1 
    while(i <= N) { peptidesFilter.[[i]] <- 
    peptidesFilter[grepl('(^|;)i($|;)', 
    peptidesFilter$Protein.group.IDs),] 
    i=i+1 } 

我有兩個問題, 最主要的一個我在grep1功能不承認爲一個變量,我怎麼能重新命名的方式,將包含變量過濾後的數據。

有什麼想法?

回答

1

對於grepl問題,您可以使用paste0例如:

paste0('(^|;)',i,'($|;)') 

對於循環,可以使這樣的事情:

ll <- lapply(seq(1:4),function(x) 
     peptidesFilter[grepl(paste0('(^|;)',x,'($|;)'), 
          peptidesFilter$Protein.group.IDs),]) 

,那麼你可以將其轉換爲data.frame:

do.call(rbind,ll) 

      Sequence First.amino.acid Protein.group.IDs 
1   AAAAAIGGR    A     1 
2 AAAAAIGGRPNYYGNEGGR    A    1;2;4 
21 AAAAAIGGRPNYYGNEGGR    A    1;2;4 
3 AAAAASSNPGGGPEMVR    A    2;5 
4   AAAAAVGGR    A     3 
22 AAAAAIGGRPNYYGNEGGR    A    1;2;4 
+0

非常感謝! paste0('(^ |;)',i,'($ |;)')解決了grep1問題,我無法理解lapply,基本上我想根據ID拆分數據,然後進一步處理每個拆分的數據。例如序列信息。 do.call(rbind,ll),它再次合併所有數據。是否有可能創建單獨的數據框(如peptideFilterx1,peptidesFilterx2等),當x = 1,x = 2等...或者我理解你錯了嗎? – Samir

+0

@Samir列表ll是你想要的,我想。 – agstudy

+0

對不起,我現在想通了。非常感謝 – Samir