首页 > 解决方案 > 矩阵中的循环 - 相对频率

问题描述

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

我想要这样的结果。

在此处输入图像描述

标签: rfor-loop

解决方案


我们可以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

虽然prop.table@ThetaFC 建议是最简单的

prop.table(Ej, 2)

正如您所看到的,有很多方法可以在没有for循环的情况下实现这一点,但是,如果您仍然想使用for循环来进行学习,您可以在列上使用单循环来实现

for (i in 1:ncol(Ej)) {
    Ej[,i] <- Ej[, i]/sum(Ej[,i])
}

推荐阅读