将数据的行均值标准化为R

时间:2013-06-22 17:24:42

标签: r row normalization

在尝试将给定行中的每个元素除以该行的均值后,我遇到了一些困难。一组虚拟数据:

set.seed(1)
x <- cbind(Plant = letters[1:5],
           as.data.frame(matrix(rnorm(60), ncol = 12)))
x

因此,对于Plant a,我希望V1,V2 ... V12除以该行的平均值。

我认为可以使用:

完成
x/rowMeans(x)

但我收到错误:

Error in rowMeans(x) : 'x' must be numeric

我认为这个错误是由于数据格式造成的,因为它是data.frame而不是vector。然而,我通过更改数据的格式设法计算每行的平均值:

library(data.table)
x.T <- as.data.table(x)
x.T[,list(Mean=rowMeans(.SD)), by=Plant]

从那里,我不知道该往哪里去。我认为一个循环可以工作,但做一些搜索,我看到它不建议。因此,我希望得到每个样本工厂的标准化数据。有什么建议吗?

1 个答案:

答案 0 :(得分:4)

第一个错误来自于尝试采用包含Plant变量/列的均值,这是非数字的。尝试:

cbind(x$Plant, x[,-1]/rowMeans(x[,-1]))