2012-09-25 74 views

回答

17

如何

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零比較兩次。

+0

+1快。我會刪除我的答案。 – Andrie

+0

@Ben Bolker感謝您的幫助.. – Gongon

+0

如果回答你的問題,你可以在複選標記單擊以接受的答案... –

11

或者你可以做的是分配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) 
+2

這可能是(?)比我的解決方案快了非常大的數據集。 –

+1

我也喜歡在概念上使用NA,它清楚地表明0不是有效的數字。 –

相關問題