2017-08-09 60 views
2

SO/R的新功能,所以先提前感謝您耐心等待我。我試圖獲得一個簡單的if/else語句在R中工作,該語句創建一個列,並根據不同列的值爲高/中/低填充三個類別。嵌套'ifelse'語句返回此錯誤:'多參數只能是'第一','最後'或'全部''

我得到的錯誤是'多參數只能是'第一','最後'或'全部'。我發現這個錯誤的文檔很少,我知道我的問題很可能是一個簡單的問題。

再次重申我對此很新。預先感謝您的幫助。更有效的方法也是我非常樂於聽到的。

zips3[, PW_Data := ifelse(pctr08zip_updated > 0.4 & pctr08zip_updated <=0.5), "Poop", 
            ifelse(pctr08zip_updated > 0.5 & pctr08zip_updated <=0.6), "Poop2", 
              ifelse(pctr08zip_updated > 0.6 & pctr08zip_updated <=0.7), "South", "Exclude"] 
+0

你應該簽出'dplyr :: case_when' – roarkz

回答

2

問題是無關ifelse的一切與不匹配您的(和)正常,這意味着要傳遞額外的參數給你data.table做。語法是ifelse(condition, trueresult, falseresult)ifelse(1:3 < 3, TRUE, FALSE),而不是ifelse(1:3 < 3), TRUE, FALSE)像你一樣,根本無法正常工作。例如,符合括號使得它很好地工作:

library(data.table) 
zips3 <- data.table(pctr08zip_updated=seq(0L,10L,1L)/10) 

zips3[, 
    PW_Data := 
    ifelse(pctr08zip_updated > 0.4 & pctr08zip_updated <=0.5, "Poop", 
    ifelse(pctr08zip_updated > 0.5 & pctr08zip_updated <=0.6, "Poop2", 
    ifelse(pctr08zip_updated > 0.6 & pctr08zip_updated <=0.7, "South", 
    "Exclude"))) 
] 

重新:更有效的方法,請參見?cut這將砍載體導入由一系列切割點所定義的段並返回一個因子的變量,它可被標記適當。

labs <- c("Exclude","Poop","Poop2","South","Exclude") 
zips3[, PW_Data_cut := labs[cut(pctr08zip_updated, c(-Inf,0.4,0.5,0.6,0.7,Inf))] ] 

我在這裏單獨指定標籤,因爲您的高和低值超出範圍的重複輸出。它給出了相同的結果:

identical(zips3$PW_Data, zips3$PW_Data_cut) 
#[1] TRUE