2017-02-27 4 views
2

Ich habe einen Datensatz für einen Online-Einzelhandelsmarkt simuliert. Der Kunde kann seine Produkte in verschiedenen Geschäften in Deutschland (z. B. München, Berlin, Hamburg ..) und in Online-Shops erwerben. Um die Breiten-/Längengraddaten von den Städten zu erhalten, verwende ich geocode von der ggmap package. Aber Kunden, die Online kaufen, können sie im ganzen Land kaufen. Jetzt möchte ich zufällige Breiten- und Längengrade innerhalb Deutschlands für die Online-Käufe generieren, um sie später mit glänzendem Faltblatt abzubilden. Gibt es eine Möglichkeit, dies zu tun?Zufällige Eingabe von Breiten-/Längengraddaten in R

Meine df sieht wie folgt aus:

View(df) 
ClientId Store ... lat lon 
1   Berlin 52 13 
2   Munich 48 11 
3   Online x  x 
4   Online x  x 

Aber mein Ziel ist ein Datenrahmen zum Beispiel wie folgt aus:

ClientId Store ... lat lon 
1   Berlin 52 13 
2   Munich 48 11 
3   Online 50 12 
4   Online 46 10 

Gibt es eine Möglichkeit, diese zufällige Breite/Länge-Daten zu erhalten und zu integrieren es zu meinem Datenrahmen?

+0

Kümmert es dich, ob die Punkte tatsächlich in Deutschland sind? Sie können den Bereich von lat/lon, der zu einer Box im ganzen Land passt, verwenden und 'sample' verwenden, um zufällige Werte in diesem Bereich zu erhalten. Oder Sie schreiben eine Funktion und lassen sie zufälliges Lat/Lon in einem Kreisradius um Ihre bekannten Gebiete (zB 100km von München) zurückgeben. –

+0

Vielen Dank für die Antwort! Es wäre sehr hilfreich, wenn es in Deutschland gäbe. Weil der Händler sich in Deutschland niederließ. Ich hatte eine ähnliche Idee wie du, aber ich habe keine Ahnung, wie ich das in R programmieren soll (ich bin ein Neuling). Und wenn ich diese Zufallszahlen erzeugen kann, wie kann ich R nun das diese Nummern im Online-Shop enthalten? – Marre

+0

http://www.dpi.inpe.br/gilberto/tutorials/software/R-contrib/sp/html/spsample.html – MichaelChirico

Antwort

1

Ihr Problem ist zweifach. Zunächst einmal, als Neuling für R, sind Sie noch nicht an die Semantik gewöhnt, die erforderlich ist, um das zu tun, was Sie brauchen. Im Grunde, was Sie fordern, um zu tun ist:

  • Erste, Identifizieren Sie, welche Aufträge stammen aus Online
  • Zweite, erzeugen eine zufällige lat und lon für diese Aufträge

Um Elemente Ihres Datenrahmens zu identifizieren, die einem Kriterium entsprechen, verwenden Sie zunächst die Funktion which. Somit, um die Zeilen in Ihrem Datenrahmen zu finden die Store Spalte gleich „Online“ haben, können Sie tun:

df[which(df$Store=="Online")] 

Um den lat oder lon für eine bestimmte Zeile zu aktualisieren, müssen wir in der Lage zu Greife auf die Spalte zu. Um Werte einer bestimmten Spalte zu erhalten, verwenden wir $. Um beispielsweise die Breitengradwerte für die Online-Aufträge zu erhalten, die Sie verwenden:

df$lat[which(df$Store=="Online")] 

Großartig! Das Problem divergiert nun und nimmt an Komplexität zu. Möchten Sie für die neuen Werte einfache Werte generieren, um Ihre Demo zu erstellen, oder möchten Sie eine neue Logik erstellen, um in einer bestimmten Region räumliche Ergebnisse zu generieren? Sie geben an, dass Sie Datenpunkte in Deutschland selbst generieren möchten, dies zu bewerkstelligen, übersteigt jedoch den Rahmen dieser Frage. Fürs Erste betrachten wir das einfache Beispiel der Erzeugung von Werten in einer begrenzten Box und aktualisieren Ihre data.frame entsprechend.

Um ganzzahlige Werte in einem bestimmten Bereich zu erzeugen, können wir die sample Funktion verwenden. Unter der Annahme, dass Sie lat Werte im Bereich von 45 und 55 und lon Werte im Bereich von 9 bis 14 wollen würden wir folgendes tun:

df$lat[which(df$Store=="Online")]<-sample(45:55,length(which(df$Store=="Online"))) 
df$lon[which(df$Store=="Online")]<-sample(9:14,length(which(df$Store=="Online"))) 

diesen Code lesen, haben wir die lat Werte in df aktualisieren, die sind "Online" -Bestellungen mit einem Vektor von Zufallszahlen aus 48:52, das ist die richtige Länge (die Anzahl der "Online" -Bestellungen).

Wenn Sie eine höhere Dezimalzahl wünschen, können Sie eine ähnliche Logik mit der runif-Funktion verwenden, die von der gleichmäßigen Verteilung und round abfragt, um die entsprechende Genauigkeit zu erhalten. Viel Glück!

Verwandte Themen