エントリが 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
、すべての行に対して使用できます。