2016-07-29 67 views
2

如何在不改變順序的情況下找到具有一定公差的矢量中的最後一個最低值?用公差找出最小值

實施例:

c(0, 785, 10273, 6231, 5417, 2328, 5249, 1725, 2656, 6258, 2687, 
2651, 1063, 325, 2556, 738, 631, 140, 57, 1173, 407, 225, 135, 
69, 81, 21, 16, 3, 0, 26, 1, 2, 0, 1, 2, 1, 1, 0, 0, 3, 1, 0, 
0, 0, 1, 0, 0, 0, 0, 1, 0) 

假設的26從最後一個元件向後工作的公差(0)我想與從先前的數量公差大於26返回數字的位置。在本例中是第30位,或人數26

回答

2

如果我正確理解你的問題,你可以這樣做:

tail(which(diff(x)>=26),1L)+1L; 
## [1] 30 

數據

x <- c(0,785,10273,6231,5417,2328,5249,1725,2656,6258,2687,2651,1063,325,2556,738,631,140,57, 
1173,407,225,135,69,81,21,16,3,0,26,1,2,0,1,2,1,1,0,0,3,1,0,0,0,1,0,0,0,0,1,0); 
+0

是的,這是正確的。如果我還想檢查並確保所有其他數據點符合此規則,該怎麼辦?因此,所有其他點都大於26.在此示例中,它將是位置2​​6. – Vedda

5

您可以使用Positionright=TRUE的論點,以避免必須向前搜索,然後採取最後的結果:

Position(identity, diff(x) >= 26, right=TRUE) + 1 
#[1] 30 
+1

+1智能解決方案,'Position()'是一個相當模糊的函數。通過用'identity'替換'isTRUE',可以稍微加快速度。 – bgoldst