2017-05-13 16 views
-1

xと呼ばれる文字列のベクターに一連のヌクレオチド配列があります。データフレーム出力を持つ配列のベクター内のモチーフのベクターを検索する

xにいくつかのモチーフがあるかどうかを確認したいと思います。私は行がXの配列であり、列がパターン/モチーフがベクトルsdseqsにあるデータフレームまたはテーブルを作成したいと思います。

sdframe <- data.frame 
sdseqs = c("AGGAG.+ATG", 
"AGAAG.+ATG","AAAGG.+ATG","GGAGG.+ATG","GAAGA.+ATG", 
"GGAGA.+ATG","AAGGT.+ATG","AGGAA.+ATG","AAGGA.+ATG","GTGGA.+ATG") 
for (i in 1:10) { 
sdframe <- cbind(sdframe,(grepl(sdseqs[i], x))) 
} 

このコードはうまく動作しますが、データフレームの最初の列は疑問符で空になります。他の列には、trueとfalseが設定されています。これが私が望むものです。

私は最初にループの外側に空のデータフレームを定義しようとしました。私はRが新しく、Perlから来ています。これは私が通常Perlでしたことです:あなたは、変数をループの外側で使用するように定義します。私はこれをRでどうやって行うことができますか?

また、実行可能なオプションは、データフレームから最初の列を削除することですが、それはそれほど簡単ではありません。

何か助けていただければ幸いです。

出力は、私は今、私のコードを取得する:

sdframe                
[1,] ?  TRUE FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE 
[2,] ?  FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE 
[3,] ?  FALSE FALSE TRUE FALSE TRUE FALSE TRUE TRUE TRUE TRUE 
[4,] ?  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
[5,] ?  FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE 
[6,] ?  FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE TRUE 
[7,] ?  FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE 
[8,] ?  FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE 
[9,] ?  FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
[10,] ?  FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE 
[11,] ?  FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 

私は同じですが、最初の列にせずにしたいですか?。私のxは11のシーケンスを持っていますが、私がチェックしたモチーフはカラムです(10カラム、最初に11を数える11)。

+0

あなたは通常、R.、事前に構造を定義する必要はありませんあなたはXのシーケンスを提供することができますか?または加入コード? –

+0

私は現時点でxの正確なシーケンスを提供することはできませんが、違いはありません。それらは、私がBiostrings関数readDNAStringSetを使ってベクトルxに組み込んだ1つの論文のシーケンスです。したがって、xは基本的にdna配列を持つベクトルです。 ループで、各列を既存のデータフレームに追加するためにcbindを使用するため、エラーが発生する前にデータフレームを定義しないとします。 – Diesel

+0

あなたの出力サンプルに基づいて私のソリューションを更新 –

答えて

0

一般的なRソリューションはベクトルに関数を適用するapplyファミリの関数を使用します。

sdseqs = c(
    "AGGAG.+ATG", 
    "AGAAG.+ATG", 
    "AAAGG.+ATG", 
    "GGAGG.+ATG", 
    "GAAGA.+ATG", 
    "GGAGA.+ATG", 
    "AAGGT.+ATG", 
    "AGGAA.+ATG", 
    "AAGGA.+ATG", 
    "GTGGA.+ATG" 
) 

sdframe <- sapply(sdseqs, function(one.motif) { 
    grepl(one.motif, x = x) 
}) 

sdframe 

    AGGAG.+ATG AGAAG.+ATG AAAGG.+ATG GGAGG.+ATG GAAGA.+ATG GGAGA.+ATG AAGGT.+ATG AGGAA.+ATG AAGGA.+ATG GTGGA.+ATG 
[1,]  FALSE  TRUE  FALSE  FALSE  TRUE  TRUE  TRUE  FALSE  TRUE  FALSE 
[2,]  FALSE  TRUE  FALSE  FALSE  TRUE  TRUE  TRUE  FALSE  TRUE  FALSE 
[3,]  FALSE  TRUE  FALSE  FALSE  TRUE  TRUE  TRUE  FALSE  TRUE  FALSE 

sdframe.t <- t(sdframe) 

sdframe.t 

      [,1] [,2] [,3] 
AGGAG.+ATG FALSE FALSE FALSE 
AGAAG.+ATG TRUE TRUE TRUE 
AAAGG.+ATG FALSE FALSE FALSE 
GGAGG.+ATG FALSE FALSE FALSE 
GAAGA.+ATG TRUE TRUE TRUE 
GGAGA.+ATG TRUE TRUE TRUE 
AAGGT.+ATG TRUE TRUE TRUE 
AGGAA.+ATG FALSE FALSE FALSE 
AAGGA.+ATG TRUE TRUE TRUE 
GTGGA.+ATG FALSE FALSE FALSE 
+0

これは完璧に動作します。しかし、私はこのコードを実行すると、私の出力は列にモチーフを持っています(あなたが投稿したものが行にあります)。そして私の行は私のxのシーケンスです。私は欲しいものを手に入れましたが、なぜあなたの出力が他の方法であるのだろうと思っていましたか?また、私はsdframe < - t(res)という行を使っていません。私はどんな考えも持っていないし、見つからない。私は非常に初心者です! – Diesel

+0

私は自分のものを正確に欲しがっていますが、私が同じコードを使用した場合、どうしたらあなたのことがどうなるのだろうと思っていました。 – Diesel

+0

転置機能を使用していないため、フレームの向きが逆です! t(res)を使用しようとしたとき何が起こったのですか? –

0

実際には、最初の行にはdata.frameを作成しません。あなたの出力はlistです。

代わりのcbindあなたが行を追加するrbindが必要:

sdframe <- data.frame() 
sdseqs = c("AGGAG.+ATG", 
     "AGAAG.+ATG","AAAGG.+ATG","GGAGG.+ATG","GAAGA.+ATG", 
     "GGAGA.+ATG","AAGGT.+ATG","AGGAA.+ATG","AAGGA.+ATG","GTGGA.+ATG") 
for (i in 1:10) { 
sdframe <- rbind(sdframe,(grepl(sdseqs[i], x))) 
} 
+0

なぜforループを使用しますか? –

+0

私はこの方法を使用すると、xの列が列になり、sdseqsの10個のパターンが行になります。私は別の方法をしたい。 – Diesel

+0

OPはR. –

関連する問題