我有以下矢量。这是一个很大的载体,但为了说明的目的,我会保持简短。
x = c(1,1,1,1,0,0,0,0,1,1,0,0,0,1,1)
请注意,1是在向量中的块。在这种情况下,有四个1的两个块,两个1的两个块。如何以简单有效的方式找到此分发?预期输出
chunk.length freq
4 1
2 2
非常感谢。
答案 0 :(得分:2)
> ans<-rle(x)
> table(ans)
values
lengths 0 1
2 0 2
3 1 0
4 1 1
答案 1 :(得分:1)
使用rle
rle_results <- rle(x)
table(rle_results$length)
## 2 3 4
## 2 1 2
或者只获得x == 1
的那些table(rle_results$length[rle_results$values == 1])
## 2 4
## 2 1
您可以将其包装在函数中以获取data.frame
rle_function <- function(x, what = NULL){
rle_results <- rle(x)
if(is.null(what)){
what <- unique(x)
}
.table <- table(rle_results$length[rle_results$values %in% what])
data.frame(chunk.length = rownames(.table), freq = as.numeric(.table))
}
rle_function(x)
## chunk.length freq
## 1 2 2
## 2 3 1
## 3 4 2
rle_function(x, what = 1)
## chunk.length freq
## 1 2 2
## 2 4 1
rle_function(x, what = 0)
## chunk.length freq
## 1 3 1
## 2 4 1
答案 2 :(得分:1)
您正在寻找rle
。
rle(x)
#Run Length Encoding
# lengths: int [1:5] 4 4 2 3 2
# values : num [1:5] 1 0 1 0 1
table(rle(x)$length[rle(x)$values == 1])
#2 4
#2 1