Sto provando a normalizzare alcuni dati che ho in un frame di dati. Voglio prendere ogni valore ed eseguirlo tramite la funzione pnorm con media e deviazione standard della colonna del valore vive in Uso cicli, ecco come avrei scritto che cosa voglio fare:.Applicazione di pnorm alle colonne di un frame di dati
#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
Sembra che in R ci dovrebbe essere un comodo modo dandy per farlo. Pensavo di essere intelligente così provato ad utilizzare la funzione di applicare:
#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
Con mio dispiacere, che non produce quello che mi aspettavo. Gli elementi in alto a sinistra e in basso a destra dell'output sono corretti, ma il gioco è fatto. Quindi, come posso de-loopify la mia vita?
Punti bonus se puoi dirmi cosa sta facendo il mio secondo blocco di codice. Tipo di mistero per me ancora. :)
Nel codice esempio, le parole righe e le colonne sono invertiti in i commenti Inoltre, si definiscono le variabili n e k per contenere colonne e righe, quindi non riescono a utilizzarle nel comando matrice. Potrebbe desiderare di ripulirlo in modo che gli altri non siano confusi. –
buon punto sul testo essendo indietro. Ma per quanto riguarda n e k, sono usati in "per (i in 1: n)" e "per (j in 1: k)" –
A destra. Mancava quella seconda parte. Buon post! –