使用 R 根据不同的分配矩阵分配个人

  • 本文关键字:分配 使用 r
  • 更新时间 :
  • 英文 :


几个计算步骤产生了一个数据框,如下所示

FACILITY.ID         LOC0001 LOC0002 LOC0010 LOC0043 LOC0054 LOC0065 LOC0100
FAC002       1       0       0       1       0       0       0
FAC003       1       2       0       0       0       0       0
FAC004       0       0       1       0       0       0       0
FAC005       0       2       0       0       0       0       0
FAC006       0       0       0       0       2       0       0
FAC007       0       0       0       0       0       0       0

位置和设施分别是列名和行名。

我还有另一个数据框,如下所示

PATIENT.ID   LOCATION.ID
P001          LOC0002
P002          LOC0001
P003          LOC0043
P004          LOC0001

现在,数据集中的患者数量和矩阵的总数是相同的。

我需要使数据集像

PATIENT.ID   FACILITY.ID
P001          FAC0003
P002          FAC0002
P003          FAC0002
P004          FAC0003

基本上,一旦来自某个位置的患者获得设施,来自同一位置的患者就会按照矩阵前往另一个设施。根本做不到

使用data.table的选项:

#create an ID (LOC.NUM) for each empty LOC at each FACILITY
mDT <- melt(capacity, id.vars="FACILITY.ID", variable.name="LOCATION.ID")[
value > 0L, .(FACILITY.ID=rep(FACILITY.ID, value), LOC.NUM=seq_len(sum(value))), LOCATION.ID]
#perform update join to look up LOCATION for each PATIENT
patients[, LOC.NUM := rowid(LOCATION.ID)][
mDT, on=.(LOCATION.ID, LOC.NUM), FAC.ID := FACILITY.ID]

输出:

PATIENT.ID LOCATION.ID LOC.NUM FAC.ID
1:       P001     LOC0002       1 FAC003
2:       P002     LOC0001       1 FAC002
3:       P003     LOC0043       1 FAC002
4:       P004     LOC0001       2 FAC003

数据:

library(data.table)
capacity <- fread("FACILITY.ID         LOC0001 LOC0002 LOC0010 LOC0043 LOC0054 LOC0065 LOC0100
FAC002       1       0       0       1       0       0       0
FAC003       1       2       0       0       0       0       0
FAC004       0       0       1       0       0       0       0
FAC005       0       2       0       0       0       0       0
FAC006       0       0       0       0       2       0       0
FAC007       0       0       0       0       0       0       0")
patients <- fread("PATIENT.ID   LOCATION.ID
P001          LOC0002
P002          LOC0001
P003          LOC0043
P004          LOC0001")

最新更新