2013-05-23 2 views
1

0부터 5까지의 항목이있는 데이터 프레임이 있습니다. 여기서 0은 누락 된 항목을 의미합니다. 각 행의 평균으로 누락 된 항목을 다시 표시하려고합니다. 평균값은 누락되지 않은 값에 대해서만 계산되어야합니다. 어떻게해야합니까? 예를 들어데이터 프레임의 누락 된 값을 행의 평균값으로 대체

, 행 :

[1] 1 2 4 0 3 

이 될 것입니다 :

[1] 1.0 2.0 4.0 2.5 3.0 

답변

5
set.seed(42) 
m <- matrix(sample(0:5,15,TRUE),ncol=5) 

#  [,1] [,2] [,3] [,4] [,5] 
# [1,] 5 4 4 4 5 
# [2,] 5 3 0 2 1 
# [3,] 1 3 3 4 2 

t(apply(m,1,function(x) {x[x==0] <- mean(x[x!=0]); x})) 

#  [,1] [,2] [,3] [,4] [,5] 
# [1,] 5 4 4.00 4 5 
# [2,] 5 3 2.75 2 1 
# [3,] 1 3 3.00 4 2 
0

이것은 위의 예를 들어 트릭을 수행해야합니다

vec[vec == 0] = mean(vec[vec != 0]) 

당신은이 포장 할 수 있습니다 함수를 사용하고 모든 행에 대해 apply을 사용하십시오.

0

apply 사용 등 능률적으로 아마도이 큰 데이터를보다 효율적으로 될 수 없다하면서

set.seed(7) 
m <- matrix(sample(0:5,15,TRUE),ncol=5) 
m 

#  [,1] [,2] [,3] [,4] [,5] 
# [1,] 5 0 2 2 4 
# [2,] 2 1 5 1 0 
# [3,] 0 4 0 1 2 

원치 않는 값을 식별하고 NA

bad <- m==0 
m[bad] <- NA 

계산 행 수단으로 대체 세트 NA을 무시하고 잘못된 값을 올바른 행의 평균으로 대체하십시오.

m[bad] <- rowMeans(m, na.rm=T)[row(bad)[bad]] 
m 

#   [,1] [,2]  [,3] [,4] [,5] 
# [1,] 5.000000 3.25 2.000000 2 4.00 
# [2,] 2.000000 1.00 5.000000 1 2.25 
# [3,] 2.333333 4.00 2.333333 1 2.00 
관련 문제