我在R中有以下矢量模式:
一个零和一的向量(二进制向量,每个长度为4),例如:
x <- c(1,0,1,1)
我想找到连续1(s)的数量(从左到右,这是非常重要的)
编辑:
如何对矩阵进行处理,其中每个向量都具有上述模式
优选具有基本功能(并且没有任何Rcpp类溶液)
没有* apply函数的任何漂亮解决方案?
答案 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