我有一个类似于以下的矩阵,它具有随机值的累积和。
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)]
我认为这很容易,但完全难倒。任何想法将不胜感激
答案 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)