私は次のデータを持っています:
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)
私は次のことをしたい:
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)
ご迷惑をおかけして申し訳ありません。
人々は私の質問に非常に辛抱強く、それは非常に有益で学習的な経験でした。ただし、ループがどのように機能するかを理解しようとしています。ループについて考えれば考えるほど、混乱が生じます。例えば:
for(i in 1:nrow(df2)) {
x <- df2[which(df2$chrom %in% df1$chrom),]
}
まったく同じことをします:
x <- df2[which(df2$chrom %in% df1$chrom),]
したがって、ループも必要ありません。これはどのように可能ですか?私which
はあなたのためにループをしていると思いますか?