R:连续编号行

时间:2014-04-11 10:14:09

标签: r

如何连续编号排序数据框中的行,每当新ID开始时从1开始?

我有什么:

id | value
a | 2
a | 6
a | 1
a | 10
a | 12
b | 5
b | 2
b | 3
...

我想要的是什么:

id | value | t
a | 2 | 1
a | 6 | 2
a | 1 | 3
a | 10 | 4
a | 12 | 5
b | 5 | 1
b | 2 | 2
b | 3 | 3
...

2 个答案:

答案 0 :(得分:3)

DF <- read.table(text="id | value
a | 2
a | 6
a | 1
a | 10
a | 12
b | 5
b | 2
b | 3", sep="|", header=TRUE)

DF$t <- sequence(rle(as.character(DF$id))$lengths)
#   id value t
# 1 a      2 1
# 2 a      6 2
# 3 a      1 3
# 4 a     10 4
# 5 a     12 5
# 6 b      5 1
# 7 b      2 2
# 8 b      3 3

答案 1 :(得分:0)

你可以使用它 -

gr_index    <- as.numeric(table(df$id))
df$gr_index <- unlist(lapply(gr_index, seq_len))

我发现ddply或split命令的速度更快,特别是在大型数据集上。