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ą. :)
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. –
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)" –
Prawo. Przegapiłem tę drugą część. Dobry post! –