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

R 将循环因子变量转换为数字序列,r,variables,transform,R,Variables,Transform,我有一个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级连续递增计数。 有什么方法/功能可以让我这样做吗 对不起,我的描述不好 假设您有一个数字向量,

我有一个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级连续递增计数。 有什么方法/功能可以让我这样做吗


对不起,我的描述不好

假设您有一个数字向量,表示您发布的简化版本。i、 e.
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)
然后我们就可以

> 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中,您可以使用
diff
cumsum

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嗨,比约恩,你能写一些生成示例数据的代码吗?如果不能,你能
dput()
部分数据吗?试试
?排序
。它对任何向量进行排序
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)