如何连续编号排序数据框中的行,每当新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
...
答案 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命令的速度更快,特别是在大型数据集上。