2017-04-03 7 views
0

こんにちは私は、NAまたは "Y"のどちらかを入力した複数の列を持つデータセットを持っています。これらの値をそれぞれ0と1にしたいと思います。複数の列をバイナリに変換するR

私はRのことがかなり新しく、これらの変数をループして再コード化する最良の方法を決定しようとしています。

STATE<-c(NA, "WA", "NY", NA, NA) 
x<-c(NA,"Y",NA,NA,"Y") 
y<-c(NA,NA,"Y",NA,"Y") 
z<-c("Y","Y",NA, NA, NA) 
mydata<-data.frame(x,y,z) 

私は大きなデータセットと、これらの変数の多くを持っています。しかし、それらのいくつか(州など)、私は一人で離したいです。どんな助けでも大歓迎です。ありがとう。

答えて

1

私が考える最善の方法は、パッケージからmutate_each()機能を使用することですdplyr

library(dplyr) 

STATE <- c(NA, "WA", "NY", NA, NA) 
x  <- c(NA, "Y", NA, NA, "Y") 
y  <- c(NA, NA, "Y", NA, "Y") 
z  <- c("Y", "Y", NA, NA, NA) 
mydata <- data.frame(x, y, z, STATE) 

mydata <- mutate_each(mydata, funs(ifelse(is.na(.), 0, 1)), -STATE) 

指定された機能を適用します変数funs()を各変数に追加します。ドット.は変数の表記です。 1つ以上の変数をスキップするには、

1

あなたはifelseを使用することができます。

ifelse(is.na(mydata),0,ifelse(mydata=="Y",1,mydata) 

彼らは「Y」であるか、彼らは何か他のものである場合に要素を保持する場合、彼らは1にNA、ある場合、これが0にMYDATAの要素を置き換えます。

バイナリタグを追加しました。 RにはバイナリタイプTRUE/FALSEがあります。バイナリを使用する場合は、代わりに

ifelse(is.na(mydata),FALSE,ifelse(mydata=="Y",TRUE,mydata) 

を使用してください。

+0

のような変数を選択するだけです(編集を参照)。また、あなたは正しいと思います...バイナリは私が望むものです。つまり、算術関数で1と0に解決される場合です。 TRUE + TRUEは2に等しいか? – pyll

+0

いくつかの列だけを変更したい場合は、 'mydata [c( 'x'、 'y')] = ifelse(mydata [c( 'x'、 'y')]) 、0、ifelse(mydata [c( 'x'、 'y')] == "Y"、1、mydata [c( 'x'、 'y')])) 'ここには、キープ。そしてはいはいTRUE + TRUE = 2 – xraynaud

0

まず、あなたは文字ベクトルは因子としてコード化されていないことを確認する必要があります。

その後
mydata <- data.frame(x,y,z, stringsAsFactors=F) 

mydata[mydata=="Y"] <- 1 
mydata[is.na(mydata)] <- 0 
mydata 
    x y z 
    1 0 0 1 
    2 1 0 1 
    3 0 1 0 
    4 0 0 0 
    5 1 1 0 
関連する問題