循环遍历行并保持列值小于随机值R.

时间:2016-11-06 14:22:52

标签: r loops apply

我有一个类似于以下的矩阵,它具有随机值的累积和。

dist<-.25
mat<-matrix(data=runif(150,25,55)*dist, nrow = 500,ncol=150)
mat = t(apply(mat, 1, cumsum))

我想做的是:

为每一行生成一个新的随机值

RV<-runif(1,1,800)

并且该行中的所有列小于&#34; RV&#34;让他们=&#34; na&#34;。我还想保留(cbind)随机值&#34; RV&#34;每行

最后,我想要一个矩阵(或数据帧),其中第一列是随机值&#34; RV&#34;为每一行生成,该行中的所有列的值都小于&#34; RV&#34;或者以其他方式&#34; na&#34;

我知道如何一次识别1行的正确值,但我似乎无法弄清楚如何使用apply函数执行此操作。也许我必须循环它,但我的真实数据集接近100,000行,所以我想尽可能避免for循环

Y<-data.frame(mat)
Y[1, which(Y[1,1:150]< RV)]

我认为这很容易,但完全难倒。任何想法将不胜感激

1 个答案:

答案 0 :(得分:2)

以下是使用apply的解决方案:

mat2 <- apply(mat,
              MARGIN = 1,
              function(x) {
                 zx <- runif(1,1,800)
                 x[x > zx] <- NA
                 return(append(zx, x))
              })

mat2 <- t(mat2)