2015-05-11 42 views
0

我擁有火車的位置,時間,緯度,長度,速度和高程數據。 我的問題是,我想刪除列車已停止的數據點,這將包括減速和加速度測量。這個想法是比較一些列車在最佳條件下行駛同樣的路線,即不停車。測量顯示列車停在不同的時間和地點。我目前檢查之前的位置是否相同,然後檢查速度是否小於之前3個值的50%。問題是如果超過以前的3個數值是o還是小於先前保持的速度的50%,那麼我不會刪除所有需要的數據,例如列車加速回到速度,如下面的U60。Excel複合條件爲任意長度

下面是該公式是U60

=IF(P60=P59,"removed",IF(S60<(0.5*S59),"removed",IF(U59="removed",IF(S60<(0.5*S58),"removed",IF(S60<(0.5*S57),"removed",P60)),P60))) 

我能想到的,以趕上這唯一的辦法是有多重嵌套條件(截至20)捕獲所有的點。這對某些列車來說可能不夠。

有沒有辦法去除減速和加速點(這可能是2點或3點),而不必有20個嵌套條件?

enter image description here

+0

S列中的值似乎在兩行或三行內轉換。難道您不能將您的計算與最後5行左右的值的平均值相比較嗎? – Jeeped

+0

不幸的是,加速過程中的點數仍未被計算所捕獲。它絕對是一個更清潔的方法,謝謝。 – theotheraussie

回答

0

使用該解決方案從@ user3819867一段時間後,我們已經確定,因爲我們永遠不能捕捉到的減速或加速的真實接​​觸點,而無需手動發現它們是不夠的。

但是,我們提出了一個應該證明是足夠的解決方案。解決方案是在速度中連續的峯值之間進行線性插值。這應該只在列車(車輛)停止時發生。爲此,我需要計算每個點的斜率,確定點是否爲局部峯,確定上一個和下一個峯的位置,然後確定這些峯的X和Y座標以執行插值。

下面簡要介紹了eqns和電子表格的外觀。

Slope of velocity line 
=IFERROR(SLOPE(AH2:AH3,AD2:AD3),"") 
local peak 
=IF(AND(AM4>0,AM3<0),"peak","")  
REPLACE 
=IFERROR(MATCH(0,INDIRECT("AH"&AP3):INDIRECT("AH"&AQ3),0),"") 
previous peak 
=SUMPRODUCT(MAX(($AN$3:AN3="peak")*(ROW($AN$3:AN3)))) 
next peak 
=MATCH("peak",AN4:$AN$453,0)+ROW(AN3) 
new Y1 
=IFERROR(INDIRECT("AH"&AP3),"") 
new Y2 
=INDIRECT("AH"&AQ3) 
X1 
=IFERROR(INDIRECT("AD"&AP3),"") 
X2 
=IFERROR(INDIRECT("AD"&AQ3),"") 
new velocity (Y) 
=IF(AO3<>"",IFERROR(AR3+(AD3-AT3)*(AS3-AR3)/(AU3-AT3),AH3),AH3) 

steps to interpolate between local maxima

希望這可以幫助別人。

1

OR功能是你在找什麼。如果它的任何一個參數是真的,它將輸出TRUE。因此將看您的最終功能,如:

=IF(OR(P60=P59,S60<(0.5*S59),S60<(0.5*S58)),"removed",P60) 'there are more arguments in your actual nested function that you will add 
+0

有趣的事實:任意長度限於[每個單元格爲'32,767'個字符](https://support.office.com/zh-cn/article/Excel-specifications-and-limits-1672b34d-7043-467e-8e27 -269d656771c3)。 – user3819867

+1

user3819867;我仍然需要添加多達20個參數才能檢查S60是否小於S41的50%(最後保留的值)。這正是我想要避免的。 OR函數確實使它變得簡單很多,謝謝。 – theotheraussie