Я ищу помощь, потратив почти день. У меня есть большой фрейм данных (bdf) и небольшой фрейм данных (sdf). Я хочу добавить переменную z в bdf в зависимости от значения sdf $y (которое изменяется как функция переменной времени).
Вот пример воспроизводимости:
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
Я хочу создать переменную z в bdf со следующими значениями sdf $y:
-
0.2 для строк, где bdf $tb варьируется от первого значения bdf $tb до середины между 1-м и 2-м значением sdf $ts. В этом простом примере это относится к строкам с 1 по 3 из dbf, которые имеют время bdf $tb ниже "2013-05-23 12:00:00 GMT" .
-
-0.1 для строк, где bdf $tb варьируется от середины между 1-м и 2-м значениями sdf $ts до середины между 2-м и 3-м значениями sdf $ts. В этом простом примере это относится к строкам 4 и 5 dbf, которые имеют время bdf $tb между "2013-05-23 12:00:00 GMT" и "2013-05-27 12:00:00 GMT",.
-
0.3 для всех строк, где bdf $tb варьируется от середины между вторым и третьим значением sdf $ts до последнего значения bdf $tb. В этом простом примере это относится к строкам от 1 до 6 до 10 из dbf, которые имеют времена, превышающие "2013-05-23 12:00:00 GMT" .
Следовательно, в конце, большой фрейм данных bdf должен выглядеть следующим образом:
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
Я не смог бы использовать dplyr:: mutate и не получал нигде с помощью циклов... Любая помощь была бы высоко оценена. Надеюсь, что я четко описал проблему как придерживающуюся этикета (это мой первый вопрос).