Вот один из подходов. Если вам нужно добавить дополнительные строки для пропущенных дат как для Ccy
из SGD
, так и для USD
для продукта "B", то сначала будет group_by
Ccy
. Используйте complete
, чтобы заполнить даты, основываясь на первой и последней таблице, найденной в Таблице A (основываясь на том, что вы описали, я верю) Затем, наконец, bind_rows
добавить таблицу A.
library(tidyverse)
tableB %>%
group_by(Ccy) %>%
complete(Date = seq.Date(min(tableA$Date), max(tableA$Date), by = "day")) %>%
fill(Product, Balance) %>%
bind_rows(tableA)
Выход
# A tibble: 12 x 4
# Groups: Ccy [4]
Ccy Date Product Balance
<chr> <date> <chr> <dbl>
1 SGD 2019-12-01 B 100
2 SGD 2019-12-02 B 100
3 SGD 2019-12-03 B 210
4 USD 2019-12-01 B 100
5 USD 2019-12-02 B 100
6 USD 2019-12-03 B 180
7 USD 2019-12-01 A 100
8 GBP 2019-12-01 A 100
9 USD 2019-12-02 A 200
10 GBP 2019-12-02 A 150
11 USD 2019-12-03 A 180
12 GBO 2019-12-03 A 210
Данные
tableA <- data.frame(
Date = as.Date(c("2019-12-01", "2019-12-01", "2019-12-02", "2019-12-02", "2019-12-03", "2019-12-03")),
Ccy = c("USD", "GBP", "USD", "GBP", "USD", "GBO"),
Product = "A",
Balance = c(100, 100, 200, 150, 180, 210),
stringsAsFactors = F
)
tableB <- data.frame(
Date = as.Date(c("2019-12-01", "2019-12-01", "2019-12-03", "2019-12-03")),
Ccy = c("USD", "SGD", "USD", "SGD"),
Product = "B",
Balance = c(100, 100, 180, 210),
stringsAsFactors = F
)