为r中的堆叠行添加唯一的索引ID

时间:2019-12-19 19:30:55

标签: r dataframe indexing

我正在尝试为相同的id行添加唯一的索引id变量。这是我的数据集的快照。

id <- c(1234, 1234, 2241,2241, 1252,1252,1252)
step <- c(0,0,0,0,0,1,-1)

data <- data.frame(id, step)

> data
    id step
1 1234    0
2 1234    0
3 2241    0
4 2241    0
5 1252    0
6 1252    1
7 1252   -1

因此具有唯一索引ID的应如下所示:

> data
    id step  index
1 1234    0   1
2 1234    0   1
3 2241    0   2
4 2241    0   2
5 1252    0   3
6 1252    1   3
7 1252   -1   3

3 个答案:

答案 0 :(得分:2)

我们可以使用match中的base R

data$index <- with(data, match(id, unique(id)))
data$index
#[1] 1 1 2 2 3 3 3

答案 1 :(得分:2)

另一种base解决方案:

transform(data, index=as.numeric(factor(id, levels = unique(id))))

#     id step index
# 1 1234    0     1
# 2 1234    0     1
# 3 2241    0     2
# 4 2241    0     2
# 5 1252    0     3
# 6 1252    1     3
# 7 1252   -1     3

答案 2 :(得分:1)

这是一个data.table解决方案:

library(data.table)
setDT(data)[, index := .GRP, by = id]

data
#         id step index
#    1: 1234    0     1
#    2: 1234    0     1
#    3: 2241    0     2
#    4: 2241    0     2
#    5: 1252    0     3
#    6: 1252    1     3
#    7: 1252   -1     3