我在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
但这并没有让我接触到所需的矢量。 有什么建议?谢谢!
答案 0 :(得分:1)
您可以将rle
与ave
合并以统计群组
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"