2009-08-07 59 views
9

列我試圖規範一些數據我有一個數據幀。我想利用每一個值,並通過與平均值和數值住在列的標準偏差沿pnorm功能運行它使用循環,這裏就是我會寫什麼我想要做的:應用pnorm到數據幀

#example data 
hist_data <- data.frame(matrix(rnorm(200,mean=5,sd=.5),nrow=20)) 

n <- dim(hist_data)[2] #columns=10 
k <- dim(hist_data)[1] #rows =20 

#set up the data frame which we will populate with a loop 
normalized <- data.frame(matrix(nrow = nrow(hist_data), ncol = ncol(hist_data))) 

#hot loop in loop action 
for (i in 1:n){ 
    for (j in 1:k){ 
     normalized[j,i] <- pnorm(hist_data[j,i], 
           mean = mean(hist_data[,i]), 
           sd = sd(hist_data[,i])) 
    } 
} 
normalized 

看來在R中應該有一個方便的矢量方法來做到這一點。我以爲我很聰明,所以嘗試使用應用功能:

#trouble ahead 
hist_data <- data.frame(matrix(rnorm(200, mean = 5,sd = .5), nrow=10)) 
normalized <- apply(hist_data, 2, pnorm, mean = mean(hist_data), sd = sd(hist_data)) 
normalized 

很讓我懊惱,那不會產生我的預期。輸出的左上角和右下角元素是正確的,但就是這樣。那麼,我怎樣才能讓自己的生活變得無足輕重呢?如果

加分,你能告訴我什麼我的第二個代碼塊實際上是做什麼。對我來說還是一種神祕。 :)

+0

在您的示例代碼什麼的話行和列扭轉評論。此外,所定義的變量n和k持有的行和列,那麼失敗的矩陣命令來使用它們。可能想要清理它,以免別人感到困惑。 – 2009-08-08 06:43:40

+0

好點的寫法是落後的。及 「(j在1:K)」 – 2009-08-08 14:32:46

+0

右:至於n和k,它們在 「用於(N I在1)」 被使用。錯過了第二部分。好帖子! – 2009-08-12 20:20:47

回答

6

你想:

normalize <- apply(hist_data, 2, function(x) pnorm(x, mean=mean(x), sd=sd(x))) 

的問題是,你傳遞的各個列進pnorm,而是整個hist_data到這兩個平均&的SD。

正如我在Twitter上提到的,我沒有統計的傢伙,所以我不能回答你實際上試圖做:)