我想用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])


我想要这样的结果。

r - 矩阵中的For循环-相对频率-LMLPHP

最佳答案

我们可以在这里使用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])
}

08-24 17:01