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