2017-08-31 111 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