我有数据仅具有一个列号我要分配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