【发布时间】:2015-07-01 20:58:13
【问题描述】:
假设我有一个形式为
的矩阵(或向量)>set.seed(1)
>X=ifelse(matrix((runif(30)),ncol = 2)>0.4,0,1)
[,1] [,2]
[1,] 1 1
[2,] 1 1
[3,] 0 1
[4,] 0 0
[5,] 1 1
[6,] 0 0
[7,] 0 0
[8,] 0 0
[9,] 0 1
[10,] 1 0
[11,] 1 0
[12,] 1 0
[13,] 0 1
[14,] 1 0
[15,] 0 0
...
etc
如何计算每列中连续零的数量,并用 1 替换那些计数小于预定义常数 k 的零。或者至少要获取每个零序列中的起始索引和元素数。 一般这个数据集中的0比1多很多,而且大多数时候一个序列的长度大于k
因此,例如,如果 k=1,那么 [4,2];[13,1] 和 [15,1] 将被 1 替换。如果 k=2,除了 [4, 1];[13,1] 和 [15,1],[3,1]、[4,1]、[14,2] 和 [15,2] 中的零也将被 1 替换在这个例子中。
当然,我可以运行一个循环并遍历所有行。我想知道是否有一个包,或者一个巧妙的矢量化技巧可以做到这一点。
更新:
k=1 的期望输出示例
[,1] [,2]
[1,] 1 1
[2,] 1 1
[3,] 0 1
[4,] 0 1
[5,] 1 1
[6,] 0 0
[7,] 0 0
[8,] 0 0
[9,] 0 1
[10,] 1 0
[11,] 1 0
[12,] 1 0
[13,] 1 1
[14,] 1 0
[15,] 1 0
k=2 的期望输出
[,1] [,2]
[1,] 1 1
[2,] 1 1
[3,] 1 1
[4,] 1 1
[5,] 1 1
[6,] 0 0
[7,] 0 0
[8,] 0 0
[9,] 0 1
[10,] 1 0
[11,] 1 0
[12,] 1 0
[13,] 1 1
[14,] 1 1
[15,] 1 1
【问题讨论】:
标签: r matrix vectorization