我有數據僅具有一個列號我要分配ID給每個組的SEQ像分配1 第一個序列1 2 3 4
,分配2秒SEQ 1 2 3
,分配3第三SEQ 1 2 3 4 5 6
有沒有人有想法如何使它在R。感謝只有一個SEQ列中的R
df <- data.frame(No = c(1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 4, 5, 6))
我有數據僅具有一個列號我要分配ID給每個組的SEQ像分配1 第一個序列1 2 3 4
,分配2秒SEQ 1 2 3
,分配3第三SEQ 1 2 3 4 5 6
有沒有人有想法如何使它在R。感謝只有一個SEQ列中的R
df <- data.frame(No = c(1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 4, 5, 6))
使用diff
功能檢查破發點,其中由高到低的順序發生和結果的cumsum
會爲每個順序遞增的ID,因爲第一個元素總是會在第一序列和以從diff
功能補償長度減少,你需要根據你想把你的組從0或1開始在前面加上0或1的序列:
cumsum(c(0, diff(df$No) < 0))
# [1] 0 0 0 0 1 1 1 2 2 2 2 2 2
cumsum(c(1, diff(df$No) < 0))
# [1] 1 1 1 1 2 2 2 3 3 3 3 3 3
如果序列是有序的,我們就可以得到邏輯索引通過檢查1,然後得到累計和。
cumsum(df$No == 1)
#[1] 1 1 1 1 2 2 2 3 3 3 3 3 3
或者更快的選擇是從data.table
library(data.table)
setDT(df)[, grp := cumsum(No - shift(No, fill = No[1]) <= 0)]
shift