R:连续1的数量(从左到右)

时间:2014-12-03 15:34:30

标签: r pattern-matching

我在R中有以下矢量模式:

一个零和一的向量(二进制向量,每个长度为4),例如:

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

我想找到连续1(s)的数量(从左到右,这是非常重要的)

编辑:
如何对矩阵进行处理,其中每个向量都具有上述模式 优选具有基本功能(并且没有任何Rcpp类溶液)

没有* apply函数的任何漂亮解决方案?

2 个答案:

答案 0 :(得分:1)

使用Rcpp可以更快地完成此任务:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
int contiones(LogicalVector x) {
  int count = 0;
  for (int i = 0; i < x.size(); i++)
  {
    if (x(i)) {
      count++;
    }
    else {
      break;
    }
  }  
   return count;
}

请注意,我将输入(隐式)转换为逻辑向量。如果您的输入仅包含0/1值并不重要,但它会将所有其他数字视为相同的1.根据需要添加输入检查。

在R中进行测试:

a <- c(1,1,1,0,1)
contiones(a)
#[1] 3
b <- c(0,1,1,1,0,1)
contiones(b)
#[1] 0
c <- c(1:5,0)
contiones(c)
#[1] 5

答案 1 :(得分:0)

这是我的解决方案:

max(cumprod(temp1) * cumsum(temp1))

示例:

temp1 <- c(1,0,1,0)
max(cumprod(temp1) * cumsum(temp1))
#[1] 1

temp1 <- c(1,1,1,0)
max(cumprod(temp1) * cumsum(temp1))
#[1] 3

temp1 <- c(0,1,1,0)
max(cumprod(temp1) * cumsum(temp1))
#[1] 0