识别R中的运行

时间:2016-10-31 15:48:49

标签: r run-length-encoding

我在R中有以下向量:

incident <- c(FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE)

现在我想获得第二个向量,将运行组合在一起并分别对进行编号:

incidentnumbered <- c('FALSE1', 'TRUE1', 'TRUE1', 'TRUE1', 'FALSE2', 'FALSE2', 'FALSE2', 'TRUE2', 'TRUE2', 'FALSE3', 'FALSE3')

我已经使用了返回的RLE()函数

Run Length Encoding
lengths: int [1:5] 1 3 3 2 2
values : logi [1:5] FALSE TRUE FALSE TRUE FALSE

但这并没有让我接触到所需的矢量。 有什么建议?谢谢!

2 个答案:

答案 0 :(得分:1)

您可以将rleave合并以统计群组

r <- rle(incident)
r$values <- paste0(r$values,ave(r$values,r$values,FUN=seq))
as.factor(inverse.rle(r))
# [1] FALSE1 TRUE1  TRUE1  TRUE1  FALSE2 FALSE2 FALSE2 TRUE2  TRUE2  FALSE3
# [11] FALSE3

答案 1 :(得分:0)

对于没有NA的逻辑矢量,使用rle的长度重复1:5并将其除以2并使用ceiling

x <- rle(incident)$lengths
n <- rep(1:length(x), x)
# [1] 1 2 2 2 3 3 3 4 4 5 5
n1 <- ceiling( n/2 )
# [1] 1 1 1 1 2 2 2 2 2 3 3
paste0(incident, n1 )
 [1] "FALSE1" "TRUE1"  "TRUE1"  "TRUE1"  "FALSE2" "FALSE2" "FALSE2" "TRUE2"  "TRUE2"  "FALSE3"
[11] "FALSE3"