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")
推荐阅读
- python - 为什么 Spyder 不能选择和读取选定的文件?
- r - 为什么 R 不计算标准误差函数的值
- sql - 我很困惑为什么我的查询没有返回正确的项目
- r - 修复 ggplot 中叠加的 geom_bar 和 position_identity() 的顺序
- regex - 正则表达式匹配字符串中除
标签之外的所有单词 - python - python - 解析列表中的嵌套字典以将父子关系存储在新列表中
- r - 在设置初始条件时创建字符串时如何排除值?
- vue.js - Vue2 组件为
价值 - ios - 如何解决 Swift 中 Instrument 工具给出的内存问题?[解决了]
- php - 使用 HelperForm 时 Prestashop 表单输入不可见