将pnorm应用于数据框的列

JD *_*ong 9 loops r apply

我正在尝试规范化数据框中的一些数据.我想获取每个值并通过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
Run Code Online (Sandbox Code Playgroud)

似乎在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
Run Code Online (Sandbox Code Playgroud)

令我懊恼的是,这不会产生我的预期.输出的左上角和右下角元素是正确的,但就是这样.那么我怎样才能解除生命的环化?

如果你能告诉我我的第二个代码块实际上在做什么,那么奖励积分.对我来说仍然是个谜.:)

geo*_*try 6

你要:

normalize <- apply(hist_data, 2, function(x) pnorm(x, mean=mean(x), sd=sd(x)))
Run Code Online (Sandbox Code Playgroud)

问题是你将单个列传入pnorm,但整个hist_data传入均值和sd.

正如我在推特上提到的,我不是统计人员,所以我无法回答你实际上要做的事情:)