webentwicklung-frage-antwort-db.com.de

Einfache Suche zum Einfügen von Werten in einen R-Datenrahmen

Dies ist eine scheinbar einfache R-Frage, aber ich sehe hier keine genaue Antwort. Ich habe einen Datenrahmen (Alldata), der folgendermaßen aussieht:

Case     Zip     market
1        44485   0
2        44481   0
3        43210   0

Es gibt über 3,5 Millionen Datensätze.

Dann habe ich einen zweiten Datenrahmen, "Postleitzahlen".

market    Zip
1         44485
1         44486
1         44488
...       ... (100 zips in market 1)
2         43210
2         43211
...       ... (100 zips in market 2, etc.)

Ich möchte den korrekten Wert für alldata $ market für jeden Fall zurückgeben, basierend auf alldata $ Zip, die mit dem entsprechenden Wert im PLZ-Datenrahmen übereinstimmt. Ich bin nur auf der Suche nach der richtigen Syntax, und wie üblich wird Hilfe sehr geschätzt.

11
Dino Fire

Da Ihnen die market-Spalte in alldata nicht wichtig ist, können Sie sie zuerst entfernen und die Spalten in alldata und zipcodes basierend auf der Zip-Spalte mit merge zusammenführen und zusammenführen:

merge(alldata[, c("Case", "Zip")], zipcodes, by="Zip")

Der Parameter by gibt die Schlüsselkriterien an. Wenn Sie also einen zusammengesetzten Schlüssel haben, können Sie etwas wie by=c("Zip", "otherfield") tun.

13
Dan Garant

Eine weitere Option, die für mich funktioniert hat und sehr einfach ist:

alldata$market<-with(zipcodes, market[match(alldata$Zip, Zip)])
5
juandelsur

Bei einem so großen Datensatz möchten Sie möglicherweise die Geschwindigkeit einer Umgebungssuche. Sie können die lookup-Funktion aus dem qdapTools-Paket wie folgt verwenden:

library(qdapTools)
alldata$market <- lookup(alldata$Zip, zipcodes[, 2:1])

Oder

alldata$Zip %l% zipcodes[, 2:1]
3
Tyler Rinker

Hier ist die dplyr Methode:

library(tidyverse)
alldata %>%
  select(-market) %>%
  left_join(zipcodes, by="Zip")

was auf meinem Rechner ungefähr die gleiche Leistung wie lookup hat.

1
James Brusey