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