R:是在矢量
问题描述:
的不同部分萨姆值I具有多个由1和0的矢量,如:R:是在矢量
[1] x <- c(0, 1, 1, 0, 0, 1)
我想在不同部位进行计数连续的1的数量这些序列,并且在这种情况下结束:
[1] 2 1
我一直在使用类似strsplit分裂那里有零序列认为,虽然这是一个数字矢量所以strsplit将无法正常工作和理想我不不想在数字和字符格式之间来回切换。
有没有另一个更简单的解决方案呢?将不胜感激任何帮助。
答
可以将价值分成载体和使用rle
这样的:
有了您的原始值
x <- 11001
temp <- rle(unlist(strsplit(as.character(x), split="")))
temp$lengths[temp$values == 1]
[1] 2 1
它与你不必矢量开始时有点简单使用strsplit
和unlist
。
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
如果您使用数字值,我认为您需要使用字符串。 – R18
@Sotos对不起。我正在处理矢量并编辑我的响应。 – Bjorn
@Cath谢谢,完美的工作! – Bjorn