2013-11-20 98 views
0

我想用相同列中非零值的一半替換數組列中的值。例如:R用相同列中非零值的一半替換數組中的值

# example  
a <- c(0, 1, 3) 
b <- c(2, NA, 4) 
c <- cbind(a,b) 
# find non-zero minimum and divide by 2  
m <- apply(c, 2, function(x) min(x[x>0], na.rm = T))/2 

我想獲得這個

 a b 
[1,] 0.5 2 
[2,] 1 1 
[3,] 3 4 

但是當我嘗試更換0(和NAS)與上述使用的計算值:

cc <- apply(c, 2, function(x) replace(x, x==0, m)) 

我得到NA不允許的消息,並且要替換的項目數不是替換長度的倍數。我明白問題所在,但無法弄清楚如何解決問題。謝謝你的幫助。

回答

0

您可以嘗試

apply(c, 2, function(x) "[<-"(x, !x | is.na(x), min(x[x > 0], na.rm = TRUE)/2)) 

#  a b 
# [1,] 0.5 2 
# [2,] 1.0 1 
# [3,] 3.0 4 

BTW:請不要使用c一個對象的名稱,因爲它已經是一個非常基礎研發功能的名稱。