创建序列指示器

时间:2016-08-12 20:03:46

标签: r

我有一个R数据帧df,如下所示

ID   <- c(1,2,1,3,3,3)
Time <- c("7:30","10:30","11:00","4:00","8:00","8:00")
sub_event <- c("TLIF","ALIF","ALIF","ALIF","TLIF","LAMI")
df <- data.frame(ID,Time,sub_event)

我对ID的事件顺序很感兴趣。例如ID 1,在7:30和10:30有2个事件,对于ID 1,它们应分别为seq 1和2.序列是ID的事件顺序。事件也被分解为子事件,而rowid没用。我正在寻找如下输出

  ID  Time seq
1  1  7:30   1
2  2 10:30   1
3  1 11:00   2
4  3  4:00   1
5  3  8:00   2

1 个答案:

答案 0 :(得分:3)

使用新的rowid功能(1.9.8 +):

library(data.table)

setDT(df)

df[ , seq := rowid(ID)][]
#    ID  Time seq
# 1:  1  7:30   1
# 2:  2 10:30   1
# 3:  1 11:00   2
# 4:  3  4:00   1
# 5:  3  8:00   2

总的来说,我建议不要使用变量名重载base函数 - seqdf都是函数。它最终会回来困扰你。