2015-07-21 60 views
1

新手來R並遇到問題。我從HUD拉出Excel表單並構建了一個用於對錶單執行一些操作的功能。但是他們改變在2012年開始的FIPS列的名稱,所以我只想說「else if」語句在R

if(2013-2015) {do this} 
    else if(2009-2012) {do this other thing} 

我是什麼樣的錯誤,這個作品爲2013-2015完全正常,但是當它擊中我得到一個錯誤信息在「否則,如果」部分於2012年 我的代碼如下:

library(gdata)#requires latest version of perl be downloaded 
library(dplyr) 

r<-function(ws,y){ 

library(dplyr) 
df<-read.xls(ws) 

if(y==2015||2014||2013){ 

    df$fips2010<-gsub(99999,"",df$fips2010) 
    df<-df[nchar(df$fips2010)<=5,] 
    #adding a zero in front of all FIPS obs. with 4 characters 
    df[nchar(df[,1])==4,1] <- paste("0", df[nchar(df[,1])==4,1], sep="") 
    df<-mutate(df,Year=y) 
    #filtering out puerto rico 
    df<-df[-grep("^72",df$fips2010),] 
    df$Year_FIPS<-paste(df$Year,df$fips2010,sep="_") 
    df<-select(df,Year_FIPS,cty_hud=countyname,st_hud=state_alpha,"3bdr_hud"=fmr3) 

return(df) 

} else if (y==2012||2011||2010||2009){ 

    df$FIPS<-gsub(99999,"",df$FIPS) 
    df<-df[nchar(df$FIPS)<=5,] 
    #adding a zero in front of all FIPS obs. with 4 characters 
    df[nchar(df[,1])==4,1] <- paste("0", df[nchar(df[,1])==4,1], sep="") 
    df<-mutate(df,Year=y) 
    #filtering out puerto rico 
    df<-df[-grep("^72",df$FIPS),] 
    df$Year_FIPS<-paste(df$Year,df$FIPS,sep="_") 
    df<-select(df,Year_FIPS,cty_hud=countyname,st_hud=state_alpha,"3bdr_hud"=fmr3) 

return(df) 
} 
} 

r13<-r(ws = "http://www.huduser.org/portal/datasets/fmr/fmr2013f/FY2013_4050_Final.xls", 
    y="2013") 

r12<-r(ws = "http://www.huduser.org/portal/datasets/fmr/fmr2012f/FY2012_4050_Final.xls", 
    y="2012") 
+4

您是否知道'y == 2015 || 2014 || 2013'總是返回TRUE?試試:'y <-0; y == 2015 || 2014 || 2013'。 – nicola

+2

繼續在@nicola上,你可能想要'%c%c(2015,2014,2013)' – kasterma

+0

擴展nicola的評論。 y == 2015 || 2014並不意味着y == 2015或y == 2014。如果你想要y == 2015 || y == 2014,那麼你必須輸入。當然,正如kasterma指出的那樣,使用'%in%'有更好的方法。 –

回答

1

在代碼中的錯誤似乎是(如@nicola在評論中指出),其y==2015||2014||2013總是真。據推測(也在評論中驗證)該意圖是檢查會員資格,例如,替換爲

y %in% c(2015,2014,2013)