0부터 5까지의 항목이있는 데이터 프레임이 있습니다. 여기서 0은 누락 된 항목을 의미합니다. 각 행의 평균으로 누락 된 항목을 다시 표시하려고합니다. 평균값은 누락되지 않은 값에 대해서만 계산되어야합니다. 어떻게해야합니까? 예를 들어데이터 프레임의 누락 된 값을 행의 평균값으로 대체
, 행 :
[1] 1 2 4 0 3
이 될 것입니다 :
[1] 1.0 2.0 4.0 2.5 3.0
0부터 5까지의 항목이있는 데이터 프레임이 있습니다. 여기서 0은 누락 된 항목을 의미합니다. 각 행의 평균으로 누락 된 항목을 다시 표시하려고합니다. 평균값은 누락되지 않은 값에 대해서만 계산되어야합니다. 어떻게해야합니까? 예를 들어데이터 프레임의 누락 된 값을 행의 평균값으로 대체
, 행 :
[1] 1 2 4 0 3
이 될 것입니다 :
[1] 1.0 2.0 4.0 2.5 3.0
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
이것은 위의 예를 들어 트릭을 수행해야합니다
vec[vec == 0] = mean(vec[vec != 0])
당신은이 포장 할 수 있습니다 함수를 사용하고 모든 행에 대해 apply
을 사용하십시오.
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