为重复的数字序列添加标签。

时间:2014-02-25 14:14:22

标签: r

假设我有一个data.frame,其重复长度不等,最大序列长度为6.

location = c(1:6, 1:4, 1:6, 1:3) 
data.frame(location = location)
   location
1      1
2      2
3      3
4      4
5      5
6      6
7      1
8      2
9      3
10     4
11     1
12     2
13     3
14     4
15     5
16     6
17     1
18     2
19     3

如何为每个组分配标签,如下所示:

 location     batch
1      1  a
2      2  a
3      3  a
4      4  a
5      5  a
6      6  a
7      1  b
8      2  b
9      3  b
10     4  b
11     1  c
12     2  c
13     3  c
14     4  c
15     5  c
16     6  c
17     1  d
18     2  d
19     3  d

2 个答案:

答案 0 :(得分:4)

您可以通过以下方式创建数字分组变量:

dat$batch <- c(0L, cumsum(diff(dat$location) < 1))


   location batch
1         1     0
2         2     0
3         3     0
4         4     0
5         5     0
6         6     0
7         1     1
8         2     1
9         3     1
10        4     1
11        1     2
12        2     2
13        3     2
14        4     2
15        5     2
16        6     2
17        1     3
18        2     3
19        3     3

答案 1 :(得分:1)

如果“位置”组始终以1开头,则它比Sven的答案更简单:只需对使用cumsum时产生的逻辑向量使用==

location <- c(1:6, 1:4, 1:6, 1:3)
dat <- data.frame(location = location)
dat$batch <- cumsum(dat$location == 1)
dat
#    location batch
# 1         1     1
# 2         2     1
# 3         3     1
# 4         4     1
# 5         5     1
# 6         6     1
# 7         1     2
# 8         2     2
# 9         3     2
# 10        4     2
# 11        1     3
# 12        2     3
# 13        3     3
# 14        4     3
# 15        5     3
# 16        6     3
# 17        1     4
# 18        2     4
# 19        3     4