2011-11-29 10 views
1

我有一個數據幀,其中的日期是水文年(10月至9月)。要改變這一點,我想使用一個if語句:如果功能和邏輯向量的長度

if(cet$month== 10|cet$month==11|cet$month==12) 
    cet$year <- substr(as.character(cet[,2]),1,4) else 
    cet$year <- substr(as.character(cet[,2]),6,9) 

,但我得到一個錯誤: the condition has length > 1 and only the first element will be used

讀了「如果」的幫助文件,我意識到,條件必須是一個長一邏輯矢量。有沒有辦法使用「或」與「如果」?我想要的只是在月份是十月,十一月或十二月時應用該表達式。

回答

4

ifelse是矢量化版本。您也可以使用%in%來減少語句的數量。

cet$year <- ifelse(cet$month%in%(10:12), substr(as.character(cet[,2]),1,4), substr(as.character(cet[,2]),6,9)) 
+4

||和往常一樣'transform'使事情更好:'CET < - 變換(CET,年= ifelse(月%在10% :12,substr(name,1,4),substr(name,6,9)))'(假設第二列標記爲'name') –

+0

感謝您的幫助! – sbg

+0

@sbg - 在使用'ifelse'時,你可能想看一下這個問題:http://stackoverflow.com/a/8190389/662787 – Tommy

0

好吧,這裏是一個重複的例子,應該有助於澄清事情:

# generate some vector 
x <- c(1,2,4,4,5,5,6,6,6) 
# have a check using OR, return values 
x[x == 2 | x == 1] 
## or return TRUE/FALSE 
(x == 2 | x == 1) 

或檢查?ifelse

編輯:請注意,字符,你需要使用 「」,像x == "yourchars" | x == "someotherchars"

這裏也是一些簡單的參考和如何與運營商合作:QuickR

+0

不應該最後一行是'(x == 2 | x == 1)',即不是'['opr? –

+0

thx。編輯,只是匆匆回答。對不起, –

-1

OR指令是雙管

| =>在if()

+0

這不會幫助OP。 –

+0

閱讀R文檔。 '||'與'|'不同 –