循环规范化数据

Loops to normalise data

这是一个小数据集

RWC<-as.data.frame(matrix(1:9,ncol=3))
RWC
V1 V2 V3
 1  4  7  
 2  5  8  
 3  6  9  

我正在尝试通过分别对行求和并将原始数字除以总和来进行标准化。 这应该会导致这个(我不需要四舍五入,这只是为了方便)。

V1    V2    V3
0.08  0.33  0.58  
0.13  0.33  0.53  
0.16  0.33  0.50 

到目前为止我已经写了

for(i in 3:nrow(RWC)){
  normalise <- sum(row[3:ncol])
  RWC <- ()
}

我一直在尝试除法并将值赋给特定的行和列,我该怎么做?

获取每行总和的快速方法是rowSums(RWC)。 然后将 RWC 除以结果。

RWC <- RWC / rowSums(RWC)

我们可以使用 prop.tablemargin 作为 1.

prop.table(as.matrix(RWC), 1)

#          V1     V2     V3
#[1,] 0.08333 0.3333 0.5833
#[2,] 0.13333 0.3333 0.5333
#[3,] 0.16667 0.3333 0.5000

prop.tablesweep

的包装
sweep(RWC, 1, rowSums(RWC), `/`)

不使用 for 循环,您可以使用 apply 函数:

apply(RWC,1, function(x) round(x/sum(x),2))

   [,1] [,2] [,3]
X1 0.08 0.13 0.17
X2 0.33 0.33 0.33
X3 0.58 0.53 0.50