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 }

私には2つの問題があります.grep1関数の主な問題は変数として認識されず、変数を含むようにフィルタリングされたデータの名前を変更する方法です。

何か案は?

4

1 に答える 1

1

たとえば、次のように使用できます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 に答える