df1 <- data.frame(Chr=1, Pos= c(100,200,300,400),stringsAsFactors=F)
df2 <- data.frame(Chr=1, PosStart= c(25,25,150,175,225,275,375),PosEnd= c(150,75,275,300,400,500,750),stringsAsFactors=F)
我想给Pos
值df1
比较,看看是否有PosStart
和df2
PosEnd
的落差。对于多于1行的df2
,这可能是正确的。在输出中,我试图附加df1$Pos
作为新列df2$CoPos
;每次条件成立。输出应该像成才:替代计划中的R
Chr PosStart PosEnd CoPos
1 25 150 100
1 150 275 200
1 175 300 200
1 225 400 300
1 275 500 300
1 375 750 400
我做一样的东西:
for(i in 1:length(df1$Pos)){
for(j in 1:length(df2$PosStart){
df2$CoPos[j]<- df1$Pos[which(df2$PosStart[j] < df1$Pos[i] < df2$PosEnd[j])]
}
}
是否有人可以告诉我,如果有一种方法可以做到这一点没有循环。另外我在这里做错了什么?经过数月的拼杀,我不认为我仍然理解循环的概念。
非常感谢你。
或者,住在基地R:'do.call(rbind,应用(DF1,1,myfun))',但基础R不会给你相同的行名。 – A5C1D2H2I1M1N2O1R2T1 2012-07-27 18:36:38
我总是忘记'do.call'!好决定。 – Justin 2012-07-27 18:37:40
非常感谢你们!这真太了不起了!!!!!!!!!它的作用像一个魅力,没有循环,我完全理解它。我想R真的会迫使人们以不同的方式思考。然而,只是为了它,你可以告诉我我的错在哪里for循环。我在两个条件之间添加了&符号。 – user1079898 2012-07-27 18:57:34