如何在loop-R中使用grepl函数中的变量

时间:2013-05-21 13:19:50

标签: r variables loops grep

我是R的新手,并且在循环和grepl函数方面存在一些问题 我有类似的数据:

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" ...

我想通过使用下面的grepl函数根据$ Protein.group.IDs过滤数据

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

我想用每个数据的循环(例如1,2,3等等)来做 并重写包含变量peptideFilter.i

的数据框的名称
   i =1
   while( i <= N) { peptidesFilter.[[i]] <- 
   peptidesFilter[grepl('(^|;)i($|;)',
   peptidesFilter$Protein.group.IDs),] 
    i=i+1 }
我有两个问题, 我在grep1函数中的主要部分不会被识别为变量,以及如何以包含变量的方式重命名过滤数据。

任何想法?

1 个答案:

答案 0 :(得分: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