我想用For循环重新计算矩阵中的相对频率。
我需要每一列的总和为一。
我想将矩阵的每个值除以列的总和。
码:
Ej<-matrix(data=c(1,2,3,4,5,6,7,8,9), nrow=3)
for ( i in 1:ncol(Ej)){
for (j in 1:nrow(Ej)){
Ej[i,j]<-Ej[i,j]/sum(Ej[,1])
}
}
sum(Ej[,1])
我想要这样的结果。
最佳答案
我们可以在这里使用sweep
sweep(Ej, 2, colSums(Ej), `/`)
# [,1] [,2] [,3]
#[1,] 0.1666667 0.2666667 0.2916667
#[2,] 0.3333333 0.3333333 0.3333333
#[3,] 0.5000000 0.4000000 0.3750000
尽管@ThetaFC建议的
prop.table
是最简单的prop.table(Ej, 2)
如您所见,没有
for
循环有很多方法可以实现此目的,但是,如果您仍然想使用for
循环进行学习,则可以使用单循环来实现for (i in 1:ncol(Ej)) {
Ej[,i] <- Ej[, i]/sum(Ej[,i])
}