我尝试给出相同的seq_number,直到 type$AA
由 ID
我尝试了
dt_1[seq:=seq(.N),by=c("ID","type")]
但行不通。有什么方法可以给予SEQ吗?
dt_1<-fread("ID type
1 AA
1 B
1 C
1 D
1 AA
1 B
1 D
1 AA
1 C
2 AA
2 C
2 F
2 D
3 AA
3 E
3 C")
dt_2<-fread("ID type seq
1 AA 1
1 B 1
1 C 1
1 D 1
1 AA 2
1 B 2
1 D 2
1 AA 3
1 C 3
2 AA 1
2 C 1
2 F 1
2 D 1
3 AA 1
3 E 1
3 C 1")
使用rowidv()
dt_1[, seq := rowidv( dt_1, cols= c( "ID", "type" ) ) ][]
# ID type seq
# 1: 1 AA 1
# 2: 1 B 1
# 3: 1 C 1
# 4: 1 D 1
# 5: 1 AA 2
# 6: 1 B 2
# 7: 1 D 2
# 8: 1 AA 3
# 9: 1 C 2
# 10: 2 AA 1
# 11: 2 C 1
# 12: 2 F 1
# 13: 2 D 1
# 14: 3 AA 1
# 15: 3 E 1
# 16: 3 C 1
来自帮助文件: rowidv(DT, cols=c("x", "y"))
等于代码DT[, N := seq_len(.N), by=c("x", "y")]
中的N列。
a dplyr
方法:
> dt_1 %>%
+ group_by(ID) %>%
+ mutate(seq = cumsum(type == "AA"))
# A tibble: 16 x 3
# Groups: ID [3]
ID type seq
<int> <chr> <dbl>
1 1 AA 1
2 1 B 1
3 1 C 1
4 1 D 1
5 1 AA 2
6 1 B 2
7 1 D 2
8 1 AA 3
9 1 C 3
10 2 AA 1
11 2 C 1
12 2 F 1
13 2 D 1
14 3 AA 1
15 3 E 1
16 3 C 1