Применение pnorm к столбцам фрейма данных - PullRequest
9 голосов
/ 07 августа 2009

Я пытаюсь нормализовать некоторые данные, которые у меня есть во фрейме данных. Я хочу взять каждое значение и запустить его через функцию pnorm вместе со средним и стандартным отклонением столбца, в котором находится значение. Используя циклы, вот как я бы выписал то, что я хочу сделать:

#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

Кажется, в R должен быть удобный способ сделать это с помощью денди. Я думал, что я умный, поэтому попытался с помощью функции применить:

#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

К моему большому огорчению, это НЕ дает того, что я ожидал. Верхний левый и нижний правый элементы вывода верны, но это все. Итак, как я могу отменить свою жизнь?

Бонусные баллы, если вы можете сказать мне, что на самом деле делает мой второй кодовый блок. Какая-то загадка для меня все еще. :)

1 Ответ

6 голосов
/ 07 августа 2009

Вы хотите:

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

Проблема в том, что вы переходите в отдельный столбец в pnorm, а все hist_data - в среднее и среднее значение.

Как я упоминал в твиттере, я не специалист по статистике, поэтому я не могу ничего ответить о том, что вы на самом деле пытаетесь сделать:)

...