2012-04-10 10 views
1
df1 <- data.frame(chrom = c("chr1","chr2", "chr5"), start=c(10,20,30), end = c(100,200,300), stringsAsFactors=FALSE) 

df2 <- data.frame(chrom = c("chr1", "chr4", "chr2"),start=c(15,500,150), end = c(75,1000,300), stringsAsFactors=FALSE) 

私の答えはあるべき使用:forループ

chrom start end 
1 chr1 15 75 

3 chr2 150 300 

、私は次の操作を実行したとき:

for(i in 1:length(df2)){ 

for(j in 1:length(df1)){ 

if(df2$chrom[i] == df1$chrom[j]) 

    x <- df2[which(df1$chrom[j] == df2$chrom[i]),] 

} 
} 

私が手:

chrom start end 
1 chr1 15 75 

は明らかに私の論理は間違っています。その1回の反復だけです。誰かが私の理解を助けることができる?たぶん私はこのようなもののために作られていません...とにかく助けてくれてありがとう

+0

は、編集のためにそんなにビクラムをいただき、ありがとうございます....そんなに良く見えます! – user1079898

+2

心配する必要はありません。誰もが最初にコーディングをしています。それは30年ほど後に良くなると言われています。 –

+0

'df1'をより多くの行に変更してみましょう。 'length(df1)'とは何ですか?次に、 'nrow(df1)'と 'ncol(df1)'を見てください。 –

答えて

4

forループは何ですか?

df2[df2$chrom %in% df1$chrom, ] 

EDIT:さらに、ポスターの理解へ:

> df2$chrom 
[1] "chr1" "chr4" "chr2" 
> df2$chrom %in% df1$chrom 
[1] TRUE FALSE TRUE 
> df1$chrom 
[1] "chr1" "chr2" "chr5" 
+0

こんにちはタイラー、ありがとう、もう一度トン....それはうまく動作します。 %in演算子が実際に意味するものを説明してください。 – user1079898

+2

yest 'x%in%y'は論理TRUE FALSE値を返すバイナリ演算子です。基本的には、「ベクトルxはベクトルyのどのアイテムにも一致しますか?追加した編集を見てください。 df2 $ chromの "chr"はdf1 $ chromのものと一致します。 "chr4はありません" chr2 "またはベクトルdf2の最後の項目$ chronはdf1 $ chronの項目と一致します –

+0

ありがとうございました! – user1079898