Rdata.Table根据内部连接更新表与另一个表

问题描述 投票:0回答:1

我需要根据另一表中的信息来更新表的子集:

main_dt = data.table(ID = 1:3, flag=c(TRUE,TRUE,FALSE), treatment_id = c(1,2,1), total_cost = 0)

costs_dt = data.table(treatment_id = 1:3, treatment_cost = c(3,5,8))

main_dt

      ID   flag treatment_id total_cost
   <int> <lgcl>        <num>      <num>
1:     1   TRUE            1          0
2:     2   TRUE            2          0
3:     3  FALSE            1          0

cost_dt

   treatment_id treatment_cost
          <int>          <num>
1:            1              3
2:            2              5
3:            3              8
我想最终得到:

> main_dt ID flag treatment_id total_cost <int> <lgcl> <num> <num> 1: 1 TRUE 1 3 2: 2 TRUE 2 5 3: 3 FALSE 1 0
我一直在尝试做类似的事情:

main_dt[flag==TRUE,][costs_dt, total_cost := total_cost + treatment_cost, on="treatment_ID", nomatch=NULL]

但这是错误的,因为它具有a:= sigsment and nomatch。如果我删除Nomatch,它似乎仍然不起作用。显然,我可以没有标志== true加入,但是我不想更新的行。另外,如果我不进行内部连接,我最终会与一堆NAS一起进行处理_ID = 3。
我觉得这应该是完全微不足道的,但我正在努力弄清楚……

您可以使用

fifelse
r join merge data.table
1个回答
0
投票
> library(data.table) > main_dt[costs_dt, on = "treatment_id", total_cost := fifelse(flag, total_cost + treatment_cost, total_cost)] > main_dt ID flag treatment_id total_cost <int> <lgcl> <num> <num> 1: 1 TRUE 1 3 2: 2 TRUE 2 5 3: 3 FALSE 1 0

	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.