2017-04-03 5 views
0

Hallo Ich habe einen Datensatz mit mehreren Spalten, die entweder mit NA oder "Y" besetzt sind. Ich möchte diese Werte jeweils auf 0 und 1 setzen.Konvertieren Sie mehrere Spalten in binäre in R

Ich bin ziemlich neu in R, und versuche, den besten Weg zu finden, diese Variablen zu durchlaufen und sie zu rekodieren.

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) 

Ich habe einen großen Datensatz und viele dieser Variablen. Aber einige von ihnen (wie STATE) möchte ich in Ruhe lassen. Jede Hilfe würde sehr geschätzt werden. Vielen Dank.

Antwort

1

Der beste Weg, ich denke, ist die mutate_each() Funktion aus dem Paket zu verwenden 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) 

Es wird die angegebene Funktion anwenden Ide funs() zu jeder Variable. Der Punkt . ist eine Repräsentation für die Variable. Um eine oder mehrere Variablen zu überspringen, schreiben Sie einfach ihre Namen mit einer - vor sie: -var1, -var2, ...

1

Sie können ifelse verwenden:

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

Dies ersetzt Elemente mydata auf 0, wenn sie NA sind, eins ist, wenn sie „Y“ oder halten Element sind, wenn sie etwas anderes sind.

Sie haben das binäre Tag hinzugefügt. R hat einen Binär-Typ: TRUE/FALSE, wenn Sie also binär sein wollen, sollten Sie stattdessen

verwenden.

+0

Gibt es eine Möglichkeit, diese Aktion nur für ausgewählte Variablen durchzuführen (siehe Bearbeiten)? Außerdem denke ich, du hast recht ... binär was ich will. Das heißt, wenn sie in arithmetischen Funktionen zu 1 und 0 aufgelöst werden. Ist TRUE + TRUE gleich 2? – pyll

+0

Wenn Sie nur einige Spalten modifizieren möchten, können Sie etwas wie 'mydata [c (' x ',' y ')] = ifelse (is.na (mydata [c (' x ',' y ')]) , 0, ifelse (mydata [c ('x', 'y')] == "Y", 1, mydata [c ('x', 'y')])) 'wo die gewünschten Spaltennamen enthalten sind behalten. Und ja WAHR + WAHR = 2 – xraynaud

0

Zuerst müssen Sie die Zeichenvektoren stellen Sie sicher, nicht als Faktoren gekennzeichnet:

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

Dann:

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 
Verwandte Themen