r - 识别 R 中多个数据表类别中特定因素的存在

标签 r loops apply

我正在使用 R 并尝试根据导入数据表的 claim 行确定具有特定诊断的患者。如果诊断代码在 claim 中,则使用同一数据表中新列中的指标对其进行分类。患者在单个理赔表中可以有多个诊断列 (>50)。

在这个特定的示例中,我仅显示 6 个诊断列,并专门查找包含诊断代码“25000”或“25001”的 claim (对于癌症等某些疾病,可能有数百个不同的诊断代码)。

claim 文件示例

ID <- c(01, 02, 03, 04, 05, 06)
Dx1 <- c('25000', '25000', '91260', '87940', '81930', '79020')
Dx2 <- c('49600', '77760', '25000', '39320', '66020', '40100')
Dx3 <- c('41000', '49600', '65120', '65400', '40100', '88730')
Dx4 <- c('83500', '65940', '43100', '95210', '44000', '80390')
Dx5 <- c('58450', '25001', '81930', '35080', '49040', '40100')
Dx6 <- c('95260', '49600', '96460', "25000", '27910', '33720')
mydata <- data.frame(ID,Dx1,Dx2,Dx3,Dx4,Dx5,Dx6)

在声明中查找特定的诊断代码

mydata2 <- mydata[mydata$Dx1 %in% c('25000', "25001")
|  mydata$Dx2 %in% c('25000', "25001")
|  mydata$Dx3 %in% c('25000', "25001")
|  mydata$Dx4 %in% c('25000', "25001")
|  mydata$Dx5 %in% c('25000', "25001")
|  mydata$Dx6 %in% c('25000', "25001"), ]

创建新的指标列

mydata$Diab <- ifelse(mydata$ID %in% (mydata2$ID), 1, 0)

我使用多个“或”语句成功创建了一个指标,但这对于 claim 数据表中的许多诊断列来说可能非常麻烦,我想知道是否有更简单的方法来做到这一点,而不是使用重复的“或”声明?

最佳答案

我会这样做:

library(data.table)
setDT(mydata)
mydata[ , Diab := apply(.SD, 1, function(x) any(x %in% c("25000","25001")))]

如果你真的想要整数而不是逻辑,只需使用“cheat +”:

mydata[ , Diab := apply(.SD, 1, function(x) +any(x %in% c("25000","25001")))]

关于r - 识别 R 中多个数据表类别中特定因素的存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34112821/

相关文章:

c - 生成随机数并在 C 中的范围内打印 "Done!"

r - 将t.test应用于大型矩阵的每一列的最快方法是什么?

r - 如何使用rbind合并具有POSIXct和Date列类的数据表?

R 无法通过 rPostgreSQL 将表写入 PostgreSQL

java - 如果我遍历一个实际上是 java 列表的集合,集合会有顺序吗?

r - 按 R 中的行组求和

r - 3D阵列->应用-> 3D阵列

r - 将漂亮的 data.frames/tables 打印到控制台

r - includeHTML 用于shiny、shinyApps.IO 和 Dropbox

java - 在 java 中比较两个 ArrayLists 时出错