2013-06-22 70 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])) 
相關問題