将循环因子变量转换为数字序列
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 中你可以使用 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 <- 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)
我有一个具有 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 中你可以使用 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 <- 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)