1

我是 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等)进行循环,并重写包含变量peptidesFilter.i的数据框的名称

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

我有两个问题,主要是 grep1 函数中的 i 不被识别为变量,以及如何以包含变量的方式重新命名过滤后的数据。

有任何想法吗?

4

1 回答 1

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
于 2013-05-21T13:48:50.200 回答