2017-05-15 16 views
0

Rライブラリで使用できるweatherAUSデータセットを使用しています。 RainTomorrowの列に「はい」を1に、「いいえ」を0に置き換えようとしています。Rの値を「はい」に1、「いいえ」を0に置き換えます。

私はこれを書いたが、動作していないよう:

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

私は言う:

警告メッセージ:[<-.factorで(*tmp*、weather4 $ RainTomorrow == "はい" 、値= c(NA、無効な因子レベル、生成されたNA)

私は何を意味するのでしょうか?どこかでas.numericまたはas.factorを使用してください。しかし、私は実際どのようになっているのか分かりません。

+0

ただやる 'as.integer(as.character(天候の$ RainTomorrow)== "はい")' – akrun

+0

いいえ、そのままそのまましてください。要因変数の代わりに0/1が必要だとあなたはなぜ信じていますか? – Roland

+0

こんにちは。下の私のポストを参照してください。私はちょうどその問題を解決しました。 – sockevalley

答えて

-1

これは、異なるモデルをテストするときには、かなり一般的なことです。たとえば、意思決定ツリーは「はい」と「いいえ」でうまく機能します。しかし、いくつかの回帰モデルは、1と0を要求します。特定のロジスティック回帰。

私はこれを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を使用しないでください。それは非効率的です。結合または単純なサブセットを使用します。しかし、OPがまだそれを使用していない場合、data.tableが必要な理由はわかりません。 – Roland

+0

@Roland as.numeric(as.factor(weather4 $ RainTomorrow))については、私はそれを私の側でテストします。ifelseと比較して効率的です。 – Wen

関連する問題