我创建了一个 8 x 1000 的 Exp() 变量矩阵。这表示从指数分布中采样 8 次的 1000 次迭代(列)。我想弄清楚如何获得每列中小于临界值的值的百分比。所以我最终得到了一个 1000 百分比的向量。我已经尝试了几件事,但对 R 来说仍然相对较新,我遇到了一些困难。
这是我当前版本的代码,不太有效。当我想要样本的均值或方差时,我使用了 apply 函数(没有 for 循环),所以我一直在尝试这种方法,但这个百分比似乎需要一些不同的东西。有什么想法吗?
m=1000
n=8
theta=4
crit=3
x=rexp(m*n,1/theta)
Mxs=matrix(x,nrow=n)
ltcrit=matrix(nrow=m,ncol=1)
for(i in 1:m){
lt3=apply(Mxs,2,length(which(Mxs[,i]<crit)/n))
}
ltcrit
Run Code Online (Sandbox Code Playgroud)
您可以在apply没有任何 for 循环的情况下使用并获得答案:
percentages = apply(Mxs, 2, function(column) mean(column < crit))
Run Code Online (Sandbox Code Playgroud)
请注意使用function(column) mean(column < crit). apply(Mxs, 2, mean)当您需要列apply(Mxs, 2, var)的均值或需要列的方差时,您可能会使用它,但请注意,您可以将任何您想要的函数放入该空间,它会在每一列上执行它。
另请注意,这mean(column < crit)是获得column小于的值百分比的好方法crit。
您可以使用colMeans:
colMeans(Mxs < crit)
[1] 0.500 0.750 0.250 0.375 0.375 0.875 ...
Run Code Online (Sandbox Code Playgroud)