
我從雨量計收集了以下格式的資料:
索引資料時間戳
1. 0 2020-01-05T00:00:00
2. 0 2020-01-05T01:00:00
3. 1 2020-01-05T01:20:15
4. 0 2020-01-05T02:00:00
5. 1 2020-01-05T02:09:00
6. 1 2020-01-05T02:09:45
7. 1 2020-01-05T02:20:00
8. 1 2020-01-05T02:20:01
9. 0 2020-01-05T03:00:00
我想每 30 分鐘對連續資料求和。像下面這樣:
索引資料時間戳
1. 0 2020-01-05T00:00:00
2. 0 2020-01-05T00:30:00
3. 0 2020-01-05T01:00:00
4. 1 2020-01-05T01:30:00
5. 0 2020-01-05T02:00:00
6. 4 2020-01-05T02:30:00
7. 0 2020-01-05T03:00:00
我已經從時間戳中獲取了 24 小時時間,並嘗試按照以下公式計算減去 2 個時間戳記是否小於 30 分鐘:
=IF(((time)-(time-1))<=0.020833,"ok","not within 30min interval")
我想到的 Excel 公式是沿著SUMIFS
函數的路線獲得一些東西,該函數將 30 分鐘間隔內的所有連續值相加
我試圖在 30 分鐘的時間間隔內設定某種COUNTIF
方法來檢查連續數據,並嘗試計算 aSUMIFS
和 aSUMPRODUCT
函數,但我正在努力將事物放在一起並符合邏輯。
謝謝
答案1
您可以使用這個公式:
=DATEVALUE(SUBSTITUTE(C2,"T"," "))+CEILING.MATH(ROUND(TIMEVALUE(SUBSTITUTE(C2,"T"," ")),5),"0:30")
分為步驟:
若要讓 Excel 將文字辨識為日期/時間,請刪除 T:
=替換(C2,“T”,“”)
若要從該日期/時間取得日期:
=日期值(D2)
若要取得該日期/時間的時間:
=回合(時間值(D2),5)
(我將解釋為什麼這裡需要 ROUND)
要計算下一個 30 分鐘增量:
=CEILING.MATH(ROUND(TIMEVALUE(SUBSTITUTE(C2,"T"," ")),5),"0:30")
然後將日期與 30 分鐘增量連接起來,即可得到答案頂部的公式。然後,您可以對錶進行透視,以按增量對值求和。
請注意步驟 3 中對 ROUND 的呼叫:
當我第一次寫公式時,我在第3步中沒有使用ROUND,但是我發現2:00:00出來的增量是2:30:00,這是不對的。經過檢查,我發現 TIMEVALUE 函數沒有回傳正確的準確度。四捨五入到小數點後 5 位解決了這個問題。
編輯:
由於您有 Excel 365,我假設您也可以存取 SEQUENCE 函數。
若要在沒有資料透視表的情況下進行聚合,您可以執行以下操作(假設您沒有預先存在的增量清單):
- 計算 MIN TimestampGroup 和 MAX Timestamp Group 之間 30 分鐘增量的數量
- 建立一個包含這麼多增量的序列(以便也表示不在來源資料中的增量)
- 使用 SUMIF 引用來源資料並按 TimestampGroup 對資料求和
- 可以選擇為聚合表建立 GroupIndex
聚合表中的公式為:
組索引:
=SEQUENCE((MAX($D$3:$D$11)-MIN($D$3:$D$11))*48+1)
這只是告訴您最小 TimestampGroup 和最大 TimestampGroup 之間有多少個 30 分鐘增量,並傳回該多個增量的整數序列。
時間戳組:
=SEQUENCE((MAX($D$3:$D$11)-MIN($D$3:$D$11))*48+1,1,MIN($D$3:$D$11),1/48)
再次,使用序列函數,返回時間戳組列表,但不是從 1 開始序列並遞增 1(預設的第 3 和第 4 個參數),而是從最小時間戳組開始序列並遞增 30 分鐘,即一天的1/48。
價值:
=SUMIF($D$3:$D$11,$F16,$B$3:$B$11)
對聚合表目前行上 TimestampGroup 所指示的行的資料列求和。