R - 矩阵的归一化数据 - 双循环

R - Normalising data of a matrix - Double for loop

我想规范化名为 "VI9A_mining" 的数据框中的数据。 我的数据框的每一列代表一个元素;每条线代表给定元素的浓度。 对于给定元素的每个浓度,我想撤回该元素的平均浓度。 所以如果我有:

Ca Zr K                     Ca  Zr  K
2  14 4  ==> i would like : -3  4   1
8  10 5                      3  0   2
5  6  0                      0  -4  -3

这是我尝试过的:

VI9A_mn=matrix(nrow=21,ncol=length(nom_mining)) #VI9A_mn is the output matrix
for (j in nom_mining){   #nom_mining is a vector with all the names of the columns of VI9A_mining
  for (i in VI9A_mining){
    VI9A_mn(i,j)=VI9A_mining(i,j)-mean(VI9A_mining(j))
  }
}

所以我想要一个循环来处理每列 (j) 中的所有行 (i)。

您可以在 数字列上使用带有匿名函数的 sapply():

num_cols <- sapply(df, is.numeric) # Find numeric columns
df[,num_cols] <- sapply(df[,num_cols], function(x) x-mean(x)) # Apply function