13

データ フレームの各行の平均を計算しようとしています。各行にゼロがあり、これらを計算から除外したい。行全体を削除するのではなく、ゼロのみを削除して、各行の残りの値の平均を計算します。行の値がすべてゼロの場合、結果はゼロになります。

4

2 に答える 2

20

どうですか

nzmean <- function(x) {
    if (all(x==0)) 0 else mean(x[x!=0])
}
apply(mydata,1,nzmean)

やや速いかもしれないと私は思います

nzmean <- function(x) {
    zvals <- x==0
    if (all(zvals)) 0 else mean(x[!zvals])
}

xつまり、ゼロとの比較を2回行わないようにしてください。

于 2012-09-25T13:05:38.310 に答える
15

または、ゼロに割り当てることもできますNA。これは、実際にやりたいことです。いくつかのサンプルデータ:

spam = matrix(runif(100), 10, 10)
spam[1,2] = 0
spam[4,3] = 0
spam[10,] = 0
spam[spam == 0] <- NA

を使用してrowMeansifelse完全に である行をチェックしますNA。ここでのna.rm議論は重要です。

mean_values = rowMeans(spam, na.rm = TRUE)
mean_values = ifelse(is.na(mean_values), 0, mean_values)
于 2012-09-25T13:16:21.217 に答える