我想要自定义行号,这样如果连续的
A
或 B
出现但没有 C
则相同的 ID 将重复,如下所示:
必填
X ID
1 A 1
2 B 2
3 A 3
4 A 3
5 B 4
6 B 4
7 B 4
8 C 5
9 C 6
10 B 7
尝试过
library(tidyverse)
df1 <-
data.frame(X = c("A", "B", "A", "A", "B", "B", "B", "C", "C", "B"))
df1 %>%
mutate(ID = row_number())
#> X ID
#> 1 A 1
#> 2 B 2
#> 3 A 3
#> 4 A 4
#> 5 B 5
#> 6 B 6
#> 7 B 7
#> 8 C 8
#> 9 C 9
#> 10 B 10
使用
rle
。
> transform(df1, ID=with(rle(X), rep(seq_along(values), lengths)))
X ID
1 A 1
2 B 2
3 A 3
4 A 3
5 B 4
6 B 4
7 B 4
8 C 5
9 C 5
10 B 6
请注意,这些不是“行号”。
要在
"C"
中使用连续数字,您可以使用像这样的临时列。
> df1 |>
+ within({
+ .tmp <- X
+ .tmp[.tmp == 'C'] <- seq_along(.tmp[.tmp == 'C'])
+ ID <- with(rle(.tmp), rep(seq_along(values), lengths))
+ rm(.tmp)
+ })
X ID
1 A 1
2 B 2
3 A 3
4 A 3
5 B 4
6 B 4
7 B 4
8 C 5
9 C 6
10 B 7