Вот базовое решение R, использующее reshape
+ aggregate
dfout <- reshape(aggregate(value ~ sold_date + pay_date,df,sum),
direction = "wide",
idvar = "sold_date",
timevar = "pay_date")
, такое что
> dfout
sold_date value.2019-01-01 value.2019-02-01 value.2019-03-01
1 2019-01-01 13 20 NA
3 2019-02-01 NA 10 5
5 2019-03-01 NA NA 15
Если вы хотите заполнить NA
0
, затем вы добавляете dfout[is.na(dfout)] <- 0
к концу кодов сверху, так что
> dfout
sold_date value.2019-01-01 value.2019-02-01 value.2019-03-01
1 2019-01-01 13 20 0
3 2019-02-01 0 10 5
5 2019-03-01 0 0 15
DATA
df <- structure(list(sold_date = structure(c(17897, 17897, 17928, 17928,
17956, 17897), class = "Date"), pay_date = structure(c(17897,
17897, 17956, 17928, 17956, 17928), class = "Date"), value = c(10,
3, 5, 10, 15, 20)), class = "data.frame", row.names = c(NA, -6L
))