【发布时间】:2013-09-19 20:09:17
【问题描述】:
我正在尝试获取类别内的序列。
我的数据是:
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
【问题讨论】:
我正在尝试获取类别内的序列。
我的数据是:
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
【问题讨论】:
将ave 与seq_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 与 rle (mydf$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
【讨论】: