Estoy tratando de normalizar algunos datos que tengo en un marco de datos. Quiero aprovechar cada valor y ejecutarlo a través de la función Pnorm junto con la media y la desviación estándar de la columna de valor reside en Uso de bucles, así es como me gustaría escribir lo que quiero hacer:.Aplicar pnorm a columnas de un marco de datos
#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
Parece que en R debería haber una forma útil de hacer esto. Yo pensé que era inteligente por lo que trató de usar la función de aplicación:
#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
Muy a mi pesar, que no produce lo que esperaba. Los elementos superior izquierdo e inferior derecho de la salida son correctos, pero eso es todo. Entonces, ¿cómo puedo de-loopify mi vida?
Puntos de bonificación si me puede decir qué está haciendo mi segundo bloque de código. Me sigue pareciendo un misterio. :)
En el código de ejemplo, las filas y columnas de las palabras se invierten en los comentarios. Además, define las variables n y k para mantener columnas y filas, y luego no las usa en el comando de la matriz. Puede que quieras limpiar eso para que los demás no se confundan. –
buen punto en la redacción que está al revés. Pero en cuanto a nyk, se usan en "for (i en 1: n)" y "for (j en 1: k)" –
Right. Perdió esa segunda parte. ¡Buen post! –