У меня есть два набора данных (df1 и df2), у которых есть общие столбцы «дата» и «страна», которые используются для left_join наборов данных (особенно столбец «цена» из df2). Если нет точного совпадения (дата и страна), отсутствующие значения (NAs) заполняются значением из предыдущей строки (по стране). Пока это работает достаточно хорошо.
Однако у меня есть проблемы, если нет точного совпадения для первого наблюдения (по стране), потому что тогда невозможно заполнить его предыдущей строкой. В этом случае NA (например, строка 1; 2015-07-18) следует заполнить предыдущим значением из df2, которое содержит наблюдение за 2015-07-15. Важно, чтобы я совпадал с точной датой или предыдущей датой (последнее известное значение), а не с ближайшей датой, которая была бы 20.07.2017.
В итоговой таблице цена на 2015- 07-18 (Великобритания) должно быть 2,5, что является последним известным значением.
Ниже вы найдете текущую таблицу и примерные данные.
date country price
1 2015-07-18 UK NA
2 2015-07-20 UK 3.0
3 2015-07-21 UK 2.7
4 2015-07-22 UK 4.5
5 2015-07-25 UK 4.6
6 2015-07-19 US 1.3
7 2015-07-20 US 2.7
8 2015-07-21 US 3.9
9 2015-07-22 US 2.8
10 2015-07-24 US 2.5
library(dplyr)
date <- c("2015-07-18", "2015-07-20", "2015-07-21", "2015-07-22", "2015-07-25", "2015-07-19", "2015-07-20",
"2015-07-21", "2015-07-22", "2015-07-24")
country <- c("UK", "UK", "UK", "UK", "UK", "US", "US", "US", "US", "US")
df1 <- cbind.data.frame(date, country)
date <- c("2015-07-15", "2015-07-20", "2015-07-21", "2015-07-22", "2015-07-24", "2015-07-19", "2015-07-20",
"2015-07-21", "2015-07-22", "2015-07-24")
country <- c("UK", "UK", "UK", "UK", "UK", "US", "US", "US", "US", "US")
price <- c(2.5, 3.0, 2.7, 4.5, 4.6, 1.3, 2.7, 3.9, 2.8, 2.5)
df2 <- cbind.data.frame(date, country, price)
df <- df1 %>%
left_join(df2, by = c("date", "country"))
df %>%
group_by(country) %>%
arrange(date) %>%
tidyr::fill(price,.direction ="down") %>%
arrange(country, date) %>%
ungroup()