随机匹配数据.表中有重复的条目



我有两个数据表:claimsSC。它们有一个共同的列——subCoverageKey。在claims中,我想创建一个新列subCoverageeyClaim。对于声明中的每一行,我都想从SC-aka中获取相应的subCoverageeyClaim值。通过CCD_ 8进行匹配。在对于subCoverageKey存在多个subCoverageeyClaim的情况下,应当进行随机选择。

如何做到这一点?

我尝试过使用sample((,但无法使其工作。

生成的data.table应该是这样的:

claims
clientID                                 claimID claimYear amount     clDate   subCoverageKey                  subCoverageKeyClaims
1:        1 OP_a19517b1-5c66-47ca-92de-40c1b1a0b16b      2019  50.01 2019-04-26 IP_accommodation  b83f2a41-64c3-4571-97e7-6534f9629104
2:        1 OP_a19517b1-5c66-47ca-92de-40c1b1a0b16b      2019  50.01 2019-04-26        IP_bundle f0a9ee55e-31b1-46f8-a0d4-91154e6c0998
3:        1 OP_a19517b1-5c66-47ca-92de-40c1b1a0b16b      2019  50.01 2019-04-26 IP_accommodation f0a9ee55e-31b1-46f8-a0d4-91154e6c0998
4:        1 OP_064c03aa-f2d5-4768-9c4e-51b54a725e56      2019  78.25 2019-06-09       IP_upgrade 74390be79-dc1e-4f7a-a0c0-f548c0b9ffcb
5:        1 OP_064c03aa-f2d5-4768-9c4e-51b54a725e56      2019  78.25 2019-06-09       Daily_cash  7a61bcf3-9e6d-4c4b-be2b-1381527dedd6
---                                                                                                                                    
2637586:   130999 OP_b165c233-cd77-461b-b37d-704ac647d878      2019   8.66 2019-09-13       IP_upgrade  ffdef3f3-2996-4d1a-bf51-a78b43029079
2637587:   130999 OP_0a11b09d-fd4c-427e-ad7b-8c67c2fa70e5      2019  61.16 2019-09-17       Daily_cash  0a9ee55e-31b1-46f8-a0d4-91154e6c0998
2637588:   131000 OP_3fb03980-8642-48bf-8967-55e410243868      2019  12.64 2019-05-10       IP_upgrade  4390be79-dc1e-4f7a-a0c0-f548c0b9ffcb
2637589:   131000 OP_64d85cc6-db73-408a-a02a-6b0c811ee06d      2019   8.44 2019-05-02        IP_bundle  ffdef3f3-2996-4d1a-bf51-a78b43029079
2637590:   131000 OP_8b5585d8-d8e0-47ed-9005-3584062d4103      2019   3.57 2019-03-10 IP_accommodation  ffdef3f3-2996-4d1a-bf51-a78b43029079

我计划加入的数据表相当大,大约有300000次观测,所以我正在寻找不会花那么多时间的东西。

我找到了我想要的答案:

  1. 将SC表转换为列表
listSC <- split(SC, SC$subCoverageKeyClaims)
  1. 使用sapply随机选择相应的subCoverageKeyClaims
claims$subCoverageKeyClaims <- sapply(claims$subCoverageKey, function(x){
sample(listSC[[x]]$subCoverageKey, 1)
})

这里有一种tidyverse方式:

library(tidyverse)
SC %>%
select(claimID, subCoverageKey) %>%
group_by(subCoverageKey) %>%
nest %>%
ungroup %>%
right_join(claims, by = 'subCoverageKey') %>%
mutate(subCoverageKeyClaims = map_chr(data, ~sample(.x$claimID, 1)))

由于claims数据集中存在重复,我们在SC中为相同的subCoverageKey创建了一个列表列,并将其与claims数据集连接。然后,我们可以从它们各自的数据中选择一个随机的CCD_ 16值。

最新更新