2009-08-07 4 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를 정의하여 열과 행을 저장 한 다음 matrix 명령에서 사용하지 못하게합니다. 다른 사람들이 혼란스러워하지 않도록 청소하고 싶을 수도 있습니다. –

+0

문구에 좋은 점은 뒤로 향하고 있습니다. 그러나 n과 k는 "for (i in 1 : n)"과 "for (j in 1 : k)"에 사용됩니다. –

+0

Right. 그 두 번째 부분을 놓쳤습니다. 좋은 게시물! –

답변

6

당신이 원하는 :

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

문제는 당신이 pnorm로 개별 열을 전달하지만, 평균 &는 SD 모두에 hist_data 전체하고 있다는 점이다. 내가 트위터에서 언급 한 바와 같이

, 나는 당신이 실제로 예제 코드 :

관련 문제