2017-05-15 187 views
0

我正在使用可在R庫中獲取的weatherAUS數據集。我試圖在RainTomorrow列中將「1」和「否」替換爲0。將R,「是」替換爲1,將「否」替換爲0

我寫了這一點,但它似乎不工作:

weather4$RainTomorrow[weather4$RainTomorrow=="Yes"]<-1 

我只是說:

警告消息:在[<-.factor*tmp*,weather4 $ RainTomorrow == 「是」 ,值= c(NA,:無效因子水平,產生的NA爲

這是什麼意思,我該怎麼辦?我認爲我守ld在某處使用as.numeric或as.factor,但我不知道如何。

+0

只是做'as.integer(as.character(天氣$ RainTomorrow)== 「是」)' – akrun

+0

不,保持原樣。爲什麼你認爲需要0/1而不是因子變量? – Roland

+0

嗨,大家好。看到我的帖子下面。我剛剛解決了這個問題。 – sockevalley

回答

-1

當人們測試不同的模型時,這是相當普遍的事情。例如,決策樹適用於「是」和「否」。然而一些迴歸模型要求1和0.特殊的Logistic迴歸。

我通過使用plyr庫解決了這個問題。這非常簡單方便。這是我的解決方案。

的解決方案產地是here.

library(plyr) 
weather5$RainToday <- revalue(weather5$RainToday, c("Yes"=1)) 
weather5$RainToday <- revalue(weather5$RainToday, c("No"=0)) 
head(weather5$RainToday) 
[1] 0 1 1 1 1 0 
Levels: 0 1 

和平!

+1

「但是有些迴歸模型需要1和0」 - 通常,對於大多數基本R統計過程,您不需要這種轉換 - 您的變量是因子,因此它將得到正確處理。你可以自己嘗試:'glm(RainToday〜。,data = weather5,family = binomial)' –

+0

謝謝。我不知道。我認爲我的變量不是因素之前,迫使我將它們轉換爲1和0. – sockevalley

+0

不要以爲我的變量是因素。 eval(expr,envir,enclos)中的錯誤:y值必須爲0 <= y <= 1 – sockevalley

0

你可以用dplyr輕鬆做到這一點。

require(dplyr) 
weather4 <- weather4 %>% 
     mutate(RainToday = ifelse(RainToday == "No",0,1)) 

希望這有助於

1
library(data.table) 
weather4[,":="(RainTomorrow=ifelse(RainTomorrow=="no",0,1))] 

或簡單地使用:

as.numeric(as.factor(weather4$RainTomorrow)) 
+0

請勿在data.table中使用ifelse。效率不高。使用加入或簡單子集。但是,我不明白爲什麼需要data.table,如果OP尚未使用它。 – Roland

+0

@Roland as.numeric(as.factor(weather4 $ RainTomorrow)),我測試它在我身邊,它比ifelse更有效率。 – Wen