r - 如何从列表中找到数据框中的数字?
问题描述
我有一个看起来有点像这样的列表。每个代码唯一标识药物:
drugname <- c('Ibuprofen','Paracetamol','Aspirin')
dose <- c(50, 70, 40)
code <- c(5619, 4820, 6803)
drugtest <- list(drugname, dose, code)
我还有一个数据框,其中包含由 idcode 唯一标识的人的信息。每行都包含有关这些人使用的不同药物的信息。这些药物由与列表中的代码列对应的药物代码标识。
personcode <-
matrix(c(1,'female',5619,1,'female',5802,2,'male',4859,3,'male',6803,3,'male',4820,
3,'male',5428),ncol=3,byrow=TRUE)
colnames(personcode) <- c("idcode","gender","drugcode")
rownames(personcode) <- c("1","2","3","4","5","6")
personcode <- data.frame(personcode)
我想改变人员代码,添加一个列来标识每个人(idcode)是否从列表(代码)中接收任何一种药物。例如,第 1 个人和第 3 个人将被识别为正在接受药物,但不是第 2 个人。我该怎么做?
解决方案
您可以合并数据框并检查是否出现药物。例如data.table
:
library(data.table)
drugtest <- data.table(drugname, dose, code)
setDT(personcode)
personcode2 <- merge(personcode, drugtest, all.x = TRUE, by.x = "drugcode", by.y = "code")
personcode2
drugcode idcode gender drugname dose
1 4820 3 male Paracetamol 70
2 4859 2 male <NA> NA
3 5428 3 male <NA> NA
4 5619 1 female Ibuprofen 50
5 5802 1 female <NA> NA
6 6803 3 male Aspirin 40
并获取哪些人接受了药物:
personcode2[,.('drug' = sum(!is.na(drugname))>1), by = 'idcode']
idcode drug
1: 3 TRUE
2: 2 FALSE
3: 1 FALSE
推荐阅读
- reactjs - 对未转换为 localIdentName 的 Storybook 连接字符串做出反应
- c# - 无法在 UDP 端口上捕获消息
- group-by - 如何同时加入、求和和分组
- sql - 为什么我无法运行 SQL Server 2019 setup.exe 文件?
- amazon-web-services - 403 禁止在 API 网关上使用自定义域的附加域
- python - 如果字典在 Python 中为空,则刷新 api 查询
- python - git post-receive 挂钩未触发 Jenkins 作业(机器 1:本地,机器 2:远程)
- flutter - 转换流
- > 到地图
> - python - 如何按另一个列值对重复的索引(我仍然想要按排序顺序)进行排序?
- javascript - Vanilla Javascript如何检查点击的元素是否是最后一项