J'essaie de normaliser certaines données que j'ai dans une trame de données. Je veux prendre chaque valeur et l'exécuter par la fonction pnorm ainsi que la moyenne et l'écart type de la colonne la valeur vit en boucle utilisant, voici comment j'écrire ce que je veux faire.Application de pnorm aux colonnes d'une trame de données
#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
Il semble que dans R il devrait y avoir un moyen pratique de faire cela. Je croyais intelligent donc essayé d'utiliser la fonction appliquer:
#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
Beaucoup à mon grand regret, cela ne produit pas ce que je pensais. Les éléments en haut à gauche et en bas à droite de la sortie sont corrects, mais c'est tout. Alors, comment puis-je dé-boucler ma vie?
Points bonus si vous pouvez me dire ce que fait réellement mon second bloc de code. Un peu un mystère pour moi encore. :)
Dans votre code exemple, les lignes de mots et les colonnes sont inversées dans les commentaires. En outre, vous définissez les variables n et k pour contenir les colonnes et les lignes, puis ne les utilisez pas dans la commande matrix. Peut vouloir nettoyer cela pour que les autres ne soient pas confus. –
bon point sur le libellé étant en arrière. Mais comme pour n et k, ils sont utilisés dans "for (i in 1: n)" et "for (j in 1: k)" –
Droite. Manqué cette deuxième partie. Bon post! –