在R中的组内生成序列

时间:2013-09-15 17:07:19

标签: r sequence

我正在尝试获取类别中的序列。

我的数据是:

A B 
1 1 
1 2
1 2
1 3
1 3
1 3
1 4
1 4

我希望获得变量“c”,例如我的数据如下:

A B C
1 1 1
1 2 1
1 2 2
1 3 1
1 3 2
1 3 3
1 4 1
1 4 2

1 个答案:

答案 0 :(得分:9)

aveseq_along

一起使用
> mydf$C <- with(mydf, ave(A, A, B, FUN = seq_along))
> mydf
  A B C
1 1 1 1
2 1 2 1
3 1 2 2
4 1 3 1
5 1 3 2
6 1 3 3
7 1 4 1
8 1 4 2

如果您的数据已经订购(在这种情况下也是如此),您也可以sequence使用rlemydf$C <- sequence(rle(do.call(paste, mydf))$lengths)),但是您没有这个限制ave

如果您是data.table粉丝,可以按以下方式使用.N

library(data.table)
DT <- data.table(mydf)
DT[, C := sequence(.N), by = c("A", "B")]
DT
#    A B C
# 1: 1 1 1
# 2: 1 2 1
# 3: 1 2 2
# 4: 1 3 1
# 5: 1 3 2
# 6: 1 3 3
# 7: 1 4 1
# 8: 1 4 2