Ich möchte eine Liste von E-Mails, die einen zugehörigen "Besitzer" und Daten haben, nehmen und sie mit eingehenden Bestellungen, mit Daten und Werten übereinstimmen. Der übereinstimmende Schlüssel ist eine E-Mail, aber ich möchte, dass sie am nächsten Tag übereinstimmt, da es in einigen Fällen Fälle gibt, in denen eine E-Mail-Adresse zwei verschiedene Besitzer haben kann.Mapping basierend auf dem nächsten Datum
reproduzierbares Beispiel:
require(dplyr)
e <- c("[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]")
d <- c("2017-01-01", "2017-04-05", "2017-04-12", "2017-05-05", "2017-08-05", "2017-12-05")
p <- c("Jeff", "Sam", "Sam", "Jeff", "Matt", "Matt")
df <- data_frame(e, d, p) %>% mutate(d=as.Date(d))
o <- c("[email protected]", "[email protected]", "[email protected]", "[email protected]")
d2 <- c("2017-02-02", "2017-04-28", "2017-05-05", "2017-07-01")
a <- c(600.50, 3000, 4999.99, 2050.6)
df2 <- data_frame(o, d2, a) %>% mutate(d2 = as.Date(d2))
die erste df ist die Karte von E-Mail-Adresse von p
Person gehört. Die df2
ist die Bestellungen, die mit diesen E-Mail-Adressen kamen, und ich möchte eine Spalte df2
hinzufügen, die den richtigen "Besitzer" anpinnt, der die ihm zugewiesene E-Mail-Adresse hat und ist in Datum am nächsten.
gewünschtes Ergebnis:
> df2
# A tibble: 4 x 3
o d2 a newowner
<chr> <date> <dbl> <char>
1 [email protected] 2017-02-02 600.50 "Jeff"
2 [email protected] 2017-04-28 3000.00 "Sam"
3 [email protected] 2017-05-05 4999.99 NA
4 [email protected] 2017-07-01 2050.60 "Jeff"
Derzeit ist es nicht ein massives Problem - aus 70k Aufzeichnungen „owned“ E-Mail-Adressen, da nur ~ 86 Fälle von Doppelarbeit sind. Das Eigentum ändert sich jedoch in den letzten Monaten des Jahres und könnte daher zu vielen Doppelgleisigkeiten führen, wenn sich die Eigentumsverhältnisse verschieben. Momentan nehme ich den Besitzer aus dem entferntesten Zeitpunkt und überschreibe die anderen Besitzer in diesen 86 Beispielen.
Danke für Ihre Hilfe!
Nett - ich denke, dass das ist, wohin mein Verstand natürlich gehen würde, obwohl ich mehr über rollende Verbindungen erfahren sollte. Was macht Slice normalerweise? Ich hätte Scheibe mit Filter (! Duplicated (e)) getauscht, die die erste nach der sortierenden aufsteigenden Date_ABS_Diff –
@MattW ergreifen würde. slice wählt Zeilen nach Position aus. Bitte beachten Sie die Dokumentation: https://www.rdocumentation.org/packages/dplyr/versions/0.7.3/topics/slice – www
Ah perfekt. Vielen Dank!Etwas Neues gelernt. –