Poszukuję pomocy po zmarnowaniu prawie dnia. Mam dużą ramkę danych (bdf) i małą ramkę danych (sdf). Chcę dodać zmienną z do bdf w zależności od wartości sdf $ (która zmienia się w zależności od zmiennej czasowej).Tworzenie zmiennej w ramce danych R w zależności od innej ramki danych
Oto powtarzalne przykład:
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
Chcę utworzyć zmienną oo w bdf z następującymi wartościami SDF $ y:
0,2 wiersze, gdzie BDF $ tb waha się od pierwsza wartość bdf $ tb do połowy między pierwszą a drugą wartością sdf $ ts. W tym prostym przykładzie, tak jest w przypadku wierszy od 1 do 3 dbf, które mają czasy bdf $ tb poniżej "2013-05-23 12:00:00 GMT".
-0,1 dla wierszy, gdzie bdf $ tb waha się od połowy między 1 a 2 wartością sdf $ ts do połowy między 2 a 3 wartością sdf $ ts. W tym prostym przykładzie, tak jest w przypadku wierszy 4 i 5 dbf, które mają czasy bdf $ tb między "2013-05-23 12:00:00 GMT" a "2013-05-27 12:00:00 GMT" .
0.3 dla wszystkich wierszy, gdzie bdf $ tb waha się od połowy między 2 a 3 wartością sdf $ ts do ostatniej wartości bdf $ tb. W tym prostym przykładzie, tak jest w przypadku wierszy od 1 do 6 do 10 dbf, które mają czasy większe niż "2013-05-23 12:00:00 GMT".
Stąd, w końcu duża dataframe BDF powinna wyglądać następująco:
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
nie mogłem osiągnąć sukces przy użyciu dplyr :: mutować, ale nigdzie stosując pętle ... Każda pomoc będzie bardzo doceniane. Mam nadzieję, że jasno opisałem tę kwestię jako przestrzegającą etykiety (to moje pierwsze pytanie).
brzmi jak _join do najbliższej wartości_ W pakiecie 'data.table' może' roll = "najbliższy" 'ale nie mam w tym żadnego doświadczenia i jestem ciekawy, czy jest to możliwe w' dplyr' – ckluss