我有以下數據:for循環再次
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
正在爲你做循環?
什麼是問題? (除了我以外,我看不到任何問號。) – OcuS 2012-04-10 19:08:35
循環是循環,無論是FORTRAN還是Julia。但你說得對,'''操作員可以做很酷的事情。我可以推薦你閱讀R-inferno,http://www.burns-stat.com/pages/Tutor/R_inferno.pdf? – 2012-04-10 19:14:43
對於第二個問題,看看你的for循環。你*永遠不會*使用變量我。這意味着你所做的全部工作是一次又一次地重新分配'x < - df2 [其中(df2 $ chrom%in%df1 $ chrom),]'' – 2012-04-10 19:23:47