2016-07-22 89 views
0
生成ID

我有數據僅具有一個列號我要分配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)) 

回答

2

使用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 
0

如果序列是有序的,我們就可以得到邏輯索引通過檢查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