私は、次のデータがあります。ザ・ループのため再び
for(i in 1:nrow(df2)) {
# only if this condition is true (i.e. if there is overlap)
if((df1$start <= df2$start && df1$end >= df2$start) ||
(df1$start >= df2$start && df1$start <= df2$end)) {
x <- df2[which(df2$chrom %in% df1$chrom),]
}
}
答えは次のようになります:
df3 <- data.frame(chrom=c("chr1", "chr2"), start=c(15,150),
end=c(75,300), stringsAsFactors=FALSE)
すべての混乱のために申し訳ありません
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","chr1"),
start=c(15,500,150,200), end=c(75,1000,300,300), stringsAsFactors=FALSE)
を私は次の操作を行いたいです。
人は私の質問にとても忍耐強く、非常に有益で学習経験があります。しかし、私はループの仕組みが理解できるようにしようとしています。たとえば:
x <- df2[which(df2$chrom %in% df1$chrom),]
だから、あなたも、ループを必要としない:
for(i in 1:nrow(df2)) {
x <- df2[which(df2$chrom %in% df1$chrom),]
}
はとまったく同じこと。これはどのように可能ですか?私はwhich
があなたのためにルーピングをやっていると思いますか?
質問とは何ですか? (私以外の疑問符は見えません) – OcuS
ループはループであり、FORTRANでもJuliaでも構いません。しかし、オペレータが非常にクールなことをすることができます。 R-インフェルノ、http://www.burns-stat.com/pages/Tutor/R_inferno.pdfを読むことをお勧めしますか? –
2番目の質問では、forループを見てください。あなたは決して変数iを使うことはありません。つまり、何回も 'x < - df2 [(df2 $ chrom%の%df1 $ chromで)、]'を再割り当てするということです(もちろん、これは一度だけ割り当てたのと同じことです) –