2014-09-30 108 views
0

對於我的生活,我無法找到一個答案在線我試圖執行if聲明的基本問題。任何幫助不勝感激。R「Error:unexpected symbol in if」

數據:

Id,mo.year, 
123,201102 
436,201101 
129,201302 

(兩個變量都是字符)

代碼:

if(data$mo.year IN('201101','201102')) {data$year=1} 

結果:

Error: unexpected symbol in "if (data$mo.year IN" 

if(data$mo.year IN('201201','201202')) {data$year=2} 
if(data$mo.year IN('201301','201302')) {data$year=3} 

產量相同的錯誤。

關於我失蹤的建議?

謝謝!

+1

沒有R命令'IN';我想你正在尋找%c('201201','201202')'中的data $ mo.year%。 – nrussell 2014-09-30 21:44:16

+0

啊是的。你是對的,但是當我用%n%運行它時,我得到了同樣的錯誤,這次表明有一個意外的逗號。 – user3508325 2014-09-30 21:49:22

+0

我的意思是當我用%運行%not%n% – user3508325 2014-09-30 21:50:03

回答

0

它看起來像你只需要ifelse,矢量化版本的if聲明:

Df <- data.frame(
    Id=c('123','436','129'), 
    mo.year=c('201102','201101','201302'), 
    stringsAsFactors=FALSE) 
## 
Df$year <- ifelse(
    Df$mo.year %in% c('201101','201102'), 
    1, 
    ifelse(
    Df$mo.year %in% c('201201','201202'), 
    2,3)) 
## 
> Df 
    Id mo.year year 
1 123 201102 1 
2 436 201101 1 
3 129 201302 3 

你只是使用mo.year列第四位數字生成你的價值假設,你也可以做類似這個更簡潔一些:

Df$year <- as.numeric(
    gsub(
    "(201)(\\d)(\\d+)","\\2",Df$mo.year)) 
+0

非常感謝您的支持幫助,nrussell。這解決了我的問題。 – user3508325 2014-10-01 12:58:07