R 数据表操作的非等联接

R 数据表操作的非等联接,r,join,data.table,non-equi-join,R,Join,Data.table,Non Equi Join,我想向数据表1中添加列,这些列是对数据表2的操作,通过变量连接,并且数据表2中的日期可能有一个更优雅的解决方案,但这将在4个步骤中提供所需的输出 首先,将表设置为数据表以执行非等联接 library(data.table) setDT(proposal_df) setDT(proposal_log) 步骤1:同一所有者和提案的非equi联接\u log$editDate可能有一个更优雅的解决方案,但这将在4个步骤中提供所需的输出 首先,将表设置为数据表以执行非等联接 library(data

我想向数据表1中添加列,这些列是对数据表2的操作,通过变量连接,并且数据表2中的日期可能有一个更优雅的解决方案,但这将在4个步骤中提供所需的输出

首先,将表设置为数据表以执行非等联接

library(data.table)

setDT(proposal_df)
setDT(proposal_log)

步骤1:同一所有者和提案的非equi联接\u log$editDate可能有一个更优雅的解决方案,但这将在4个步骤中提供所需的输出

首先,将表设置为数据表以执行非等联接

library(data.table)

setDT(proposal_df)
setDT(proposal_log)
步骤1:同一所有者和提案的非相等联接\u log$editDate另一个选项是使用by=.EACHI:

另一个选项是使用by=.EACHI:


你想要的输出中的结果变量是什么意思?哎呀,我忘了它们在那里了。结果变量和管理变量与问题无关,所以我删除了它们。您期望的输出中的结果变量是什么意思?哎呀,我忘了它们在那里了。结果和管理者变量与问题无关,因此我删除了它们。
  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
library(data.table)

setDT(proposal_df)
setDT(proposal_log)
Proposals <- proposal_log[proposal_df, on = .(owner, editDate <= editDate)]
   proposal outcome owner totalAtEdit            editDate i.proposal i.totalAtEdit
1:       39       1  Adam         566 2019-04-23 10:10:00         41           -27
2:       45       0  Adam         100 2019-04-23 10:10:00         41           -27
3:        9       0  Adam           2 2019-06-17 09:04:00         62          1000
4:       39       1  Adam         566 2019-06-17 09:04:00         62          1000
5:       45       0  Adam         100 2019-06-17 09:04:00         62          1000
6:       73       0  Alan        1264 2019-07-24 11:10:00        169           151
7:      111       0  Alan        5000 2019-07-24 11:10:00        169           151
8:      146       0  Alan          18 2019-07-24 11:10:00        169           151
9:      146       0  Alan          18 2018-10-29 16:58:00         72          1137
Outcomes <- dcast(Proposals, i.proposal ~ outcome, fun=length)[
  , pctWon := `1`/(`0`+`1`)]
Means <- Proposals[outcome==1, .(m_total = mean(totalAtEdit)), by=i.proposal]
Outcomes[Means, on=.(i.proposal), wonValueMean := m_total]
proposal_df[Outcomes, on=c(proposal = "i.proposal")]
   proposal owner totalAtEdit            editDate 0 1    pctWon wonValueMean
1:       41  Adam         -27 2019-04-23 10:10:00 1 1 0.5000000          566
2:       62  Adam        1000 2019-06-17 09:04:00 2 1 0.3333333          566
3:       72  Alan        1137 2018-10-29 16:58:00 1 0 0.0000000           NA
4:      169  Alan         151 2019-07-24 11:10:00 3 0 0.0000000           NA
library(data.table)
setDT(proposal_df)
setDT(proposal_log)
proposal_df[, c("countWon","countLost","wonValueMean","pctWon") := 
    proposal_log[.SD, on=.(owner, editDate<=editDate), by=.EACHI, {
        cw <- sum(outcome==1L)
        .(cw, sum(outcome==0L), mean(x.totalAtEdit[outcome==1L]), cw/.N)
    }][, (1L:2L) := NULL]
]