假设我有一个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
答案 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