2017-03-12 1 views
0

Dies ist meine erste Frage, also bitte entschuldigen Sie die Fehler. Ich habe einen Datenrahmen, wo die Adresse in einer Zeile ist und viele fehlende Werte und mehrere Fehler hat.Aktualisieren Sie ein Feld, wenn der Wert eines Musters wahr ist

Adresse

  • Braemor Drive, Clontarf, Co.Dublin
  • Meadow Avenue, Dundrum
  • Philipsburgh Avenue, Marino
  • Myrtle Platz, Die Küste

Ich möchte um ein neues Feld "Bezirk" hinzuzufügen, wenn der Wert der Adresse bestimmte Werte enthält, zB wenn er Marino, Fairview oder Clo enthält ntarf der Bezirk sollte Dublin 3.

Dublin3 <- c("Marino", "Fairview", "Clontarf") 
matches <- unique (grep(paste(Dublin3,collapse="|"), 
DubPPReg$Address, value=TRUE)) 

Mit R, wie kann ich den Wert von District aktualisieren, wo das Spiel wahr ist?

Antwort

1
# I've created example data frame with column Adress 
df <- data.frame(Adress = c("Braemor Drive", 
          "Clontarf", 
           "Co.Dublin", 
           "Meadow Avenue", 
           "Dundrum", 
           "Philipsburgh Avenue", 
           "Marino", 
           "Myrtle Square", "The Coast")) 
# And vector Dublin 
Dublin3 <- c("Marino", "Fairview", "Clontarf") 

# Match names in column Adress and vector Dublin 3 
df$District <- ifelse(df$Adress %in% Dublin3, "Dublin 3",FALSE) 

    df 
       Adress District 
1  Braemor Drive FALSE 
2   Clontarf Dublin 3 
3   Co.Dublin FALSE 
4  Meadow Avenue FALSE 
5    Dundrum FALSE 
6 Philipsburgh Avenue FALSE 
7    Marino Dublin 3 
8  Myrtle Square FALSE 
9   The Coast FALSE 

Statt FALSE können Sie etwas anderes (z NA) wählen.

Edited: Wenn Ihre Daten in Vektor sind

df <- c("Braemor Drive, Churchtown, Co.Dublin", 
     "Meadow Avenue, Clontarf, Dublin 14", 
     "Sallymount Avenue, Ranelagh", "Philipsburgh Avenue, Marino") 

die wie folgt

df 
[1] "Braemor Drive, Churchtown, Co.Dublin" 
[2] "Meadow Avenue, Clontarf, Dublin 14" 
[3] "Sallymount Avenue, Ranelagh"   
[4] "Philipsburgh Avenue, Marino" 

sieht können Sie Ihre maches finden grepl mit wie diese

match <- ifelse(grepl("Marino|Fairview|Clontarf", df, ignore.case = T), "Dublin 3",FALSE) 

und Ausgang ist

[1] "FALSE" "Dublin 3" "FALSE" "Dublin 3" 

Das bedeutet, dass eine oder alle der passenden Namen, die Sie suchen (d. H. Marino, Fairview oder Clontarf) sind in der zweiten und vierten Reihe in df.

+0

Vielen Dank Miha. Ihr Codebeispiel funktioniert einwandfrei, wenn ich es ausprobiere, aber ich kann es nicht an meinem Beispiel arbeiten lassen. Wenn ich eine genaue Übereinstimmung der vollständigen Adresse "Philipsburgh Avenue, Marino, Dublin 3" habe, funktioniert es. Aber nicht für ein Wort im Text. – ClareMc

+0

Definieren Sie dieses Wort im Vektor 'Dublin3' und führen Sie den Code erneut aus. – Miha

+0

Wenn ich versuche Dublin3 <- c ("Avenue", "Fairview", "Clontarf") df $ Bezirk <- ifelse (df $ Adresse% in% Dublin3, "Dublin 3", FALSCH) auf die oben genannten df Beispiel, die Ergebnisse sind für alle Einträge mit Ausnahme von "Clontarf" falsch, was eine exakte Übereinstimmung ist. – ClareMc

Verwandte Themen