Ich suche Hilfe, nachdem ich fast einen Tag verschwendet habe. Ich habe einen großen Datenrahmen (bdf) und einen kleinen Datenrahmen (sdf). Ich möchte die Variable z zu bdf hinzufügen, abhängig vom Wert von sdf $ y (der sich als Funktion einer Zeitvariablen ändert).Variable im R-Datenrahmen abhängig von einem anderen Datenrahmen erstellen
Hier ist ein reproduzierbares Beispiel:
bdf <- data.frame(tb = seq(as.POSIXct("2013-05-19 17:11:22 GMT", tz="GMT"), by=5624*24, length.out=10))
bdf
tb
1 2013-05-19 17:11:22
2 2013-05-21 06:40:58
3 2013-05-22 20:10:34
4 2013-05-24 09:40:10
5 2013-05-25 23:09:46
6 2013-05-27 12:39:22
7 2013-05-29 02:08:58
8 2013-05-30 15:38:34
9 2013-06-01 05:08:10
10 2013-06-02 18:37:46
sdf <- data.frame(ts = as.POSIXct(c("2013-05-22", "2013-05-25", "2013-05-30"), tz="GMT"), y = c(0.2, -0.1, 0.3))
> sdf
ts y
1 2013-05-22 0.2
2 2013-05-25 -0.1
3 2013-05-30 0.3
I Variable z in BDF mit den folgenden Werten von sdf $ y erstellen möchten: von
0,2 für Zeilen, in denen BDF $ tb reicht der erste bdf $ tb-Wert in der Mitte zwischen dem 1. und 2. Wert von sdf $ ts. In diesem einfachen Beispiel ist dies der Fall bei den Zeilen 1 bis 3 von dbf, die Zeiten bdf $ tb unter "2013-05-23 12:00:00 GMT" haben.
-0,1 für Zeilen, in denen bdf $ tb von der Mitte zwischen dem 1. und 2. Wert von sdf $ ts bis zur Mitte zwischen dem 2. und 3. Wert von sdf $ ts reicht. In diesem einfachen Beispiel ist das der Fall in den Zeilen 4 und 5 von dbf, die Zeiten bdf $ tb zwischen "2013-05-23 12:00:00 GMT" und "2013-05-27 12:00:00 GMT" haben. .
0,3 für alle Zeilen, in denen bdf $ tb von der Mitte zwischen dem 2. und 3. Wert von sdf $ ts bis zum letzten Wert von bdf $ tb reicht. In diesem einfachen Beispiel ist dies der Fall bei den Zeilen 1 bis 6 bis 10 von dbf, die Zeiten haben, die größer sind als "2013-05-23 12:00:00 GMT".
daher am Ende sollte die große Datenrahmen BDF wie folgt aussehen:
tb z
1 2013-05-19 17:11:22 0.2
2 2013-05-21 06:40:58 0.2
3 2013-05-22 20:10:34 0.2
4 2013-05-24 09:40:10 -0.1
5 2013-05-25 23:09:46 -0.1
6 2013-05-27 12:39:22 0.3
7 2013-05-29 02:08:58 0.3
8 2013-05-30 15:38:34 0.3
9 2013-06-01 05:08:10 0.3
10 2013-06-02 18:37:46 0.3
ich nicht gelingen konnte mit dplyr :: mutieren und bekam nirgendwo Loops ... Jede Hilfe wäre sehr geschätzt. Ich hoffe, dass ich das Thema klar als an die Etikette gebunden beschrieben habe (es ist meine erste Frage).
klingt wie _join zum nächsten Wert_ Im Paket 'data.table' vielleicht' roll = "nearest", aber ich habe keine Erfahrung darin und ich bin gespannt, ob es in 'dplyr' möglich ist. – ckluss