将循环因子变量转换为数字序列

Transforming a looping factor variable into a sequence of numerics

我有一个具有 6 个级别的因子变量,简化后的样子如下:

1 1 2 2 2 3 3 3 4 4 4 4 5 5 5 6 6 6 1 1 1 2 2 2 2... 1 1 1 2 2...  (with n = 78)

请注意,每个数字大部分 但并不总是 重复三次。 我需要将此变量转换为以下模式:

1 1 2 2 2 3 3 3 4 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 8... 

其中 6 个级别的每个重复连续计数升序。 有什么方法/任何功能可以让我这样做吗?

对不起我的错误描述!

假设您有一个数值向量代表您发布的简化版本。即 x = c(1,1,1,2,2,3,3,3,1,1,2,2),你可以使用这个:

library(dplyr)

cumsum(x != lag(x, default = 0))

# [1] 1 1 1 2 2 3 3 3 4 4 5 5

它将每个值与其前一个值进行比较,如果它们不同则加 1(从 1 开始)。

也许你可以试试rle,即

v <- rep(seq_along((v<-rle(x))$values),v$lengths)

带有虚拟数据的示例

x = c(1,1,1,2,2,3,3,3,4,4,5,6,1,1,2,2,3,3,3,4,4)

那么我们可以得到

> v
 [1]  1  1  1  2  2  3  3  3  4  4  5  6  7  7  8  8  9  9
[19]  9 10 10

base 中你可以使用 diffcumsum.

c(1, cumsum(diff(x)!=0)+1)
# [1] 1 1 2 2 2 3 3 3 4 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 8

数据:

x <- c(1,1,2,2,2,3,3,3,4,4,4,4,5,5,5,6,6,6,1,1,1,2,2,2,2)