Я хотел бы добавить в таблицу данных 1 столбцы, которые представляют собой операции над таблицей данных 2, объединяемые переменной и где даты из таблицы данных 2 <= даты из таблицы данных 1. Я ищу решение это не слишком дорого в вычислительном отношении (у меня около 20 тыс. строк). </p>
Таблица данных 1 - у меня есть набор данных предложений, их владельцев и их правок. Даты:
proposal_df <- structure(list(proposal = c(41, 62, 169, 72), owner = c("Adam",
"Adam", "Alan", "Alan"), totalAtEdit = c(-27, 1000, 151, 1137
), editDate = structure(c(1556014200, 1560762240, 1563966600,
1540832280), class = c("POSIXct", "POSIXt"), tzone = "UTC")), class = "data.table", row.names = c(NA,
-4L))
proposal owner totalAtEdit editDate
1 41 Adam -27 2019-04-23 10:10:00
2 62 Adam 1000 2019-06-17 09:04:00
3 169 Alan 151 2019-07-24 11:10:00
4 72 Alan 1137 2018-10-29 16:58:00
Таблица данных 2 - У меня есть журнал предложений и дата, когда они были выиграны или проиграны (outcome == 1
или 0
):
proposal_log <- structure(list(proposal = c(9, 48, 43, 39, 45, 73, 111, 179,
115, 146), outcome = c(0, 1, 1, 1, 0, 0, 0, 0, 0, 0), owner = c("Adam",
"Adam", "Adam", "Adam", "Adam", "Alan", "Alan", "Alan", "Alan",
"Alan"), totalAtEdit = c(2, 2, 4, 566, 100, 1264, 5000, 75, 493,
18), editDate = structure(c(1557487860, 1561368780, 1561393140,
1546446240, 1549463520, 1546614180, 1547196960, 1579603560, 1566925200,
1536751800), class = c("POSIXct", "POSIXt"), tzone = "UTC")), class = "data.table", row.names =
c(NA,
-10L))
proposal outcome owner totalAtEdit editDate
1 9 0 Adam 2 2019-05-10 11:31:00
2 48 1 Adam 2 2019-06-24 09:33:00
3 43 1 Adam 4 2019-06-24 16:19:00
4 39 1 Adam 566 2019-01-02 16:24:00
5 45 0 Adam 100 2019-02-06 14:32:00
6 73 0 Alan 1264 2019-01-04 15:03:00
7 111 0 Alan 5000 2019-01-11 08:56:00
8 179 0 Alan 75 2020-01-21 10:46:00
9 115 0 Alan 493 2019-08-27 17:00:00
10 146 0 Alan 18 2018-09-12 11:30:00
I хотите добавить несколько столбцов к proposal_df
, которые являются операциями на proposal_log
, объединяясь по owner
и где proposal_log$editDate <= proposal_df$editDate
:
countWon
- количество предложений, где outcome == 1
countLost
- количество предложений, где outcome == 0
wonValueMean
- totalAtEdit
среднее предложение, где outcome == 1
pctWon
-% предложений, где outcome == 1
Вывод будет выглядеть так:
proposal owner totalAtEdit editDate countWon countLost wonValueMean pctWon
1 41 Adam -27 2019-04-23 10:10:00 1 1 566 0.5000000
2 62 Adam 1000 2019-06-17 09:04:00 1 2 566 0.3333333
3 169 Alan 151 2019-07-24 11:10:00 0 3 NaN 0.0000000
4 72 Alan 1137 2018-10-29 16:58:00 0 1 NaN 0.0000000
Спасибо!