我正在尝试规范化数据框中的一些数据。我想获取每个值并通过 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
令我懊恼的是,这并没有达到我的预期。输出的左上角和右下角元素是正确的,但仅此而已。那么我怎样才能让我的生活去循环呢?
如果你能告诉我我的第二个代码块实际上在做什么,那就加分。对我来说还是个谜。:)