2013-06-20 44 views
0

對動物園對象使用is.na函數有問題。這裏是我的嘗試:如何在動物園對象中使用「!is.na」功能

z1 <- zoo(matrix(1:8, 4, 2), as.Date("2003-01-01") + 0:3) 
z1[2,1]<-NA 

所以,Z1是...

2003-01-01 1 5 
2003-01-02 NA 6 
2003-01-03 3 7 
2003-01-04 4 8 

當我使用乘以一個列有is.na我得到:

!is.na(z1[,1])*z1[,2] 

,它返回:

2003-01-01 2003-01-02 2003-01-03 2003-01-04 
     TRUE  FALSE  TRUE  TRUE 

但是,當我簡單地做T RUE * 100,程序返回編號:

TRUE*100 
[1] 100 
FALSE*100 
[1] 0 

我應該使用什麼功能,使程序返回的數字,而不是TRUE S和FALSE S(我找這裏的!is.na爲動物園的對象等效功能) ?

+0

你應該這樣做'(!is.na(Z1 [ ,1]))* z1 [,2]' – agstudy

+0

謝謝你的回答,我試過了,效果很好! – sts

回答

2

!*優先級高,所以你的第一個例子被解析爲

!(is.na(z1[,1]) * z1[,2]) 

?Syntax運算符優先級在R.

+0

感謝您的回答,我嘗試了您的解決方案,但仍然返回了Trues和Falses。感謝您的時間和幫助! – sts

+0

邏輯「不」總是比所有其他邏輯運算符具有最高的綁定優先級。但是,作爲一般規則,您可以注意到數學運算符的優先級高於邏輯運算符。 – Martin