我正在尝试规范化数据框中的某些数据。我想获取每个值,然后通过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中应该有一个方便的矢量操作方式。我以为我很聪明,所以尝试使用apply函数:
#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

令我非常恼火的是,这并没有达到我的预期。输出的左上角和右下角元素是正确的,仅此而已。那么,如何才能使我的生活变得轻松自在呢?

如果您能告诉我我的第二个代码块实际上在做什么,则可以加分。还是对我来说还是个谜。 :)

最佳答案

你要:

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

问题在于您要将单个列传递给pnorm,但是将整个hist_data传递给均值和sd。

正如我在Twitter上提到的那样,我不是统计专家,所以我无法回答您实际上试图做的事情:)

关于r - 将pnorm应用于数据框的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1246244/

10-12 22:20
查看更多