在 R 中,根据另一个变量的段分配数字变量?

In R, assign numeric variable according to segments of another variable?

一些简单的示例数据:

test <- c(rep('B', 10), rep('A', 7), rep('C', 10), rep('A', 3))

#1] “B” “B” “B” “B” “B” “B” “B” “B” “B” “B” “A” “A” “A” “A” “A” “A” “A” “C” “C” “C” “C” “C” “C” “C” “C” “C” “C” “A” “A” “A”

我想为此分配一个数字变量,其中 'B' 的第一个块得到 1,'A' 的第一个块得到 2,[=22= 的第一个块] 得到 3,'A' 的下一个块得到 4。我试过:

test <- factor(test, levels = unique(test))
as.integer(test)

但这会为 'A' 的第二个块分配一个 2。我怎样才能让它为每个块分配唯一的序列号?实际数据是药物组合,我需要指定的数字变量以 1

开头

我猜你需要rle

> with(rle(test), rep(seq_along(lengths), lengths))
 [1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4