2013-06-22 40 views
2

在尝试按给定行的平均值划分给定行中的每个元素后,我遇到了一些困难。一套假数据:使用其中的行平均值对数据进行规范化处理

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 

我认为这个错误是由于数据的格式,因为它是一个数据.frame而不是矢量。然而,我设法通过改变数据的格式来计算每行的平均值:

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

从那里,我不知道该去哪里。我认为循环会起作用,但是做一些搜索,我看到它不被建议。因此,我想要为每个样品工厂提供标准化数据。有什么建议吗?

回答

4

第一个错误来自尝试采取的意思,包括Plant变量/列,这是非数字。试试:

cbind(x$Plant, x[,-1]/rowMeans(x[,-1])) 
相关问题