2017-05-15 163 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