2017-08-31 194 views
1

的不同部分薩姆值I具有多個由1和0的矢量,如:R:是在矢量

[1] x <- c(0, 1, 1, 0, 0, 1) 

我想在不同部位進行計數連續的1的數量這些序列,並且在這種情況下結束:

[1] 2 1 

我一直在使用類似strsplit分裂那裏有零序列認爲,雖然這是一個數字矢量所以strsplit將無法正常工作和理想我不不想在數字和字符格式之間來回切換。

有沒有另一個更簡單的解決方案呢?將不勝感激任何幫助。

+0

如果您使用數字值,我認爲您需要使用字符串。 – R18

+0

@Sotos對不起。我正在處理矢量並編輯我的響應。 – Bjorn

+1

@Cath謝謝,完美的工作! – Bjorn

回答

4

可以將價值分成載體和使用rle這樣的:

有了您的原始值

x <- 11001 

temp <- rle(unlist(strsplit(as.character(x), split=""))) 

temp$lengths[temp$values == 1] 
[1] 2 1 

它與你不必矢量開始時有點簡單使用strsplitunlist

x <- c(0, 1, 1, 0, 0, 1) 

temp <- rle(x) 

temp$lengths[temp$values == 1] 
[1] 2 1 
+1

對於這種情況不是必需的,但是'temp $ values [temp $ values!= 0] * temp $ lengths [temp $ values!= 0]'可能會更通用 –

+1

@db正確。這也適用於非二元向量的情況。 – lmo