如何为连续的相似条目分配自定义ID(有例外)?

问题描述 投票:0回答:1

我想要自定义行号,这样如果连续的

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
r dplyr tidyverse
1个回答
1
投票

使用

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
© www.soinside.com 2019 - 2024. All rights reserved.