2009-08-07 13 views
9

Próbuję znormalizować niektóre dane, które mam w ramce danych. Chcę podjąć każdą wartość i uruchomić go za pomocą funkcji pnorm wraz ze średnią i odchylenie standardowe kolumny wartość mieszka w Korzystanie pętle, oto jak będę pisać co chcę zrobić.Stosowanie pnorm do kolumn ramki danych

#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 

Wydaje się, że w R powinien być przydatny wektor w stylu dandy. Myślałem, że byłem sprytny, więc wypróbowałem używając funkcji:

#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 

Ku mojemu rozczarowaniu, to NIE daje tego, czego się spodziewałem. Górny lewy i prawy dolny element wyjścia są poprawne, ale to wszystko. Jak mogę zrezygnować z mojego życia?

Dodatkowe punkty, jeśli możesz mi powiedzieć, co właściwie robi mój drugi blok kodu. Trochę dla mnie tajemnicą. :)

+0

W przykładzie kodu odpowiedzi, wiersze i kolumny słowa są odwrócone w komentarze. Ponadto, definiujesz zmienne n i k, aby przechowywać kolumny i wiersze, a następnie nie można ich użyć w poleceniu macierzy. Może to oczyścić, żeby inni nie byli zdezorientowani. –

+0

dobry punkt na sformułowanie będące w tył. Ale jak dla n i k, są one używane w "for (i in 1: n)" i "for (j in 1: k)" –

+0

Prawo. Przegapiłem tę drugą część. Dobry post! –

Odpowiedz

6

Chcecie:

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

Problemem jest to, że jesteś przechodzącą w pojedynczej kolumnie w pnorm, ale cały hist_data zarówno do średniej & SD.

Jak wspomniałem na Twitterze, że nie jestem statystyk facet, więc nie mogę nic na temat tego, czego rzeczywiście próbuje zrobić :)

Powiązane problemy