2016-06-21 23 views
0

Ich bin neu in R und Programmierung im Allgemeinen. Ich möchte Indikatorvariablen basierend auf mehreren verschachtelten Bedingungen erstellen. Meine Daten werden wie folgt aussieht:Erstellen einer Indikatorvariablen mit mehreren logischen Anweisungen

id city income 
1 A  100 
2 A  65 
3 B  110 
4 B  80 
5 C  60 

Ich möchte ein Skript schreiben, die so etwas wie dies funktioniert:

 if (mydata$city=="A" & mydata$income >= 90) { 
      mydata$x <- 1 
    }  else if (mydata$city=="B" & mydata$income >= 100) { 
      mydata$x <- 1 
    }  else { 
      mydata$x <- 0 
} 

ich das Endergebnis möchte diese

id city income x 
1 A  100 1 
2 A  65  0 
3 B  110 1 
4 B  80  0 
5 C  60  0 
sein

Vielen Dank im Voraus für einen Rat!

+0

Vorteil aus der Tatsache, dass R vektorisiert ist: 'mydata $ x = 0; mydata $ x [(mydata $ city == "A" & mydata $ einkommen> = 90) | (mydata $ city == "B" & mydata $ einkommen> = 100)] = 1'. Vektorisierung bedeutet, dass Sie einen ganzen Datenrahmen oder eine Spalte mit einer einzigen Anweisung bearbeiten können, anstatt Zeile für Zeile zu gehen. – eipi10

+0

Das hat den Trick dank gemacht! – TDP

Antwort

0
dplyr::mutate(myData, x = ifelse((city == "A" & income >= 90) | (city == "B" & income >= 100), 1, 0)) 

    id city income x 
1 1 A 100 1 
2 2 A  65 0 
3 3 B 110 1 
4 4 B  80 0 
5 5 C  60 0 
1

Definieren Sie Ihre Funktion:

myfun <- function(x,y) { 
     if(x == "A" & y >= 90) { 
       1 
     } else if(x == "B" & y >= 100) { 
       1 
     } else 0 
} 

Verwenden mapply:

mydata$x <- mapply(myfun, mydata$city, mydata$income) 
0

Wir data.table

library(data.table) 
setDT(df1)[, x := as.integer(city =="A" & income >= 90 | city == "B" & income >=100)] 
# id city income x 
#1: 1 A 100 1 
#2: 2 A  65 0 
#3: 3 B 110 1 
#4: 4 B  80 0 
#5: 5 C  60 0 

verwenden oder mit base R

df1$x <- with(df1, as.integer(city =="A" & income >= 90 | city == "B" & income >=100)) 
Verwandte Themen