2009-08-07 26 views
9

列我试图规范一些数据我有一个数据帧。我想利用每一个值,并通过与平均值和数值住在列的标准偏差沿pnorm功能运行它使用循环,这里就是我会写什么我想要做的:应用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 

很让我懊恼,那不会产生我的预期。输出的左上角和右下角元素是正确的,但就是这样。那么,我怎样才能让自己的生活变得无足轻重呢?如果

加分,你能告诉我什么我的第二个代码块实际上是做什么。对我来说还是一种神秘。 :)

+0

在您的示例代码什么的话行和列扭转评论。此外,所定义的变量n和k持有的行和列,那么失败的矩阵命令来使用它们。可能想要清理它,以免别人感到困惑。 – 2009-08-08 06:43:40

+0

好点的写法是落后的。及 “(j在1:K)” – 2009-08-08 14:32:46

+0

右:至于n和k,它们在 “用于(N I在1)” 被使用。错过了第二部分。好帖子! – 2009-08-12 20:20:47

回答

6

你想:

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

的问题是,你传递的各个列进pnorm,而是整个hist_data到这两个平均&的SD。

正如我在Twitter上提到的,我没有统计的家伙,所以我不能回答你实际上试图做:)