根據時間段計算另外 2 個事件之間的發生次數🙋:女標誌:你好!
在「子類型」列中,只有在第二次 REM 出現的「開始」列中的時間在 15 分鐘內時,我需要計算「Stadium N2」在兩次出現「REM」之間出現的次數。第一次REM 發生的「結束」列中的時間。
請參閱螢幕截圖中的星星:在本例中,計數將為 3
這樣做的公式是什麼?
謝謝:擁抱臉: :雙手合十:
自動化和腳本編寫蘋果系統回覆:根據時間段計算另外 2 個事件之間的發生次數您能否提供範例資料以使測試更容易?
回覆:根據時間段計算其他 2 個事件之間的發生次數給你!
回覆:根據時間段計算另外 2 個事件之間的發生次數還有一個問題,累計值可以嗎? 那麼,在兩個 REM 之間的第一個 Stadium N2 上,它將是 1,第二個是 2,依此類推?
回覆:根據時間段計算其他 2 個事件之間的發生次數這絕對不是唯一的選擇,但根據您擁有的資料量,當您向表中添加兩列時,類似的方法可能會起作用
Names Default To Here(1);
Current Data Table() << New Column("R", Numeric, Continuous, Formula(
Col Cumulative Sum(If(:SubType == "REM", 1, .))
));
Current Data Table() << New Column("c_n2", Numeric, Continuous, Formula(
If(!IsMissing(:R),
Col Sum(If(:SubType == "Stadium N2", 1, 0), :R);
,
.
);
));
回覆:根據時間段計算其他 2 個事件之間的發生次數謝謝你的建議,這確實將所有 N2 間歇性識別為 REM 
然而,我只需要計算 2 個 REM 之間的時間間隔,最長間隔為 15 分鐘(大多數 REM 結束時間和隨後的 REM 開始時間相距 > 15 分鐘)。
您將如何整合這個時間過濾器?
回覆:根據時間段計算另外 2 個事件之間的發生次數數據應該如何排序? 例如,我們在下一個結束之前有第一個 REM 結束?

或者資料是否已正確排序(我剛剛將此處的格式更改為日期時間)? 我們缺少日期信息,那麼如何區分日期何時變化,或者我們應該根據時間戳進行猜測?

編輯:遵循資料的原始順序,只關心檢查結束和下一個開始
Names Default To Here(1);
dt = Open("$DOWNLOADS/example(1).jmp");
m_sub = dt[0, "SubType"];
rem_rows = Loc(m_sub, "REM");
rem_ends = dt[rem_rows, "Time of Day[End]"];
rem_starts = dt[rem_rows, "Time of Day[Start]"];
Remove From(rem_ends, N Items(rem_starts));
Remove From(rem_starts, 1);
rem_durs = (rem_starts - rem_ends);
new_col = dt << New Column("Counts", Numeric, Continuous);
For Each({rem_dur, idx}, rem_durs,
If(rem_dur < In Minutes(15) & rem_dur >= 0,
row_start = rem_rows[idx];
row_end = rem_rows[idx + 1];
ntwos = Loc(m_sub[row_start::row_end], "Stadium N2");
ntwo_count = N Items(ntwos);
dt[row_start::row_end, "Counts"] = ntwo_count;
);
);
回覆:根據時間段計算另外 2 個事件之間的發生次數謝謝你! 值確實已由 Start 排序。
小附加問題:我需要手動驗證正確性,但只能在按其他列分組後執行此操作:ID、:Validated、:Subtype
我將在哪裡以及如何適應分組依據?
回覆:根據時間段計算另外 2 個事件之間的發生次數新增分組變數需要對腳本進行大量變更。 最簡單的選擇很可能是為每個群組新增建立子集,對這些群組運行計算,然後將它們連接回原始資料表(可能需要新增某種唯一識別碼列)。 另一個相當簡單的選擇是建立單一 GROUP 列,然後使用該列循環不同的選項,但必須小心索引。