我想在一组变量(DX1-DX5)中搜索一系列值(ICD9 代码列表或 ICD10 代码列表),条件是 DXVER=9 搜索 ICD9 列表,DXVER=10 搜索 ICD10 列表。这可以手动写出,但因为变量和代码列表可能更长,我想通过按名称引用组来学习这样做。
我已经尝试过 if else 语句、rowsum 和编码每个单独的步骤。尽管我总是遗漏了三个要求中的一个步骤,但这些都可以工作。1.以DXVER为条件 2.DX1-DX5列表参考DXS 3.代码列表参考ICD9和ICD10
ICD9 <- c('042', '7953', '79571', 'V08')
ICD10 <- c('888', 'a10', 'b10', '987')
DXS <- c(paste('DX', seq(1:5), sep = ''))
MergedData<-data.frame(DXVER=c("9", "9", "0", "0", "9"),
DX1 = c('042',"1","1","2","1"),
DX2 = c("4","3",'2',"4","3"),
DX3 = c("2","2","4","2","2"),
DX4 = c("3",'101',"2","3","2"),
DX5 = c('79571',"3",'888',"2","2"),
ID = c(345, 123, 246, 432, 121))
MergedData$HIV_claim<NA
MergedData$HIV_claim[MergedData$DX1 %in% ICD9 & MergedData$DXVER=="9"] <-
1
MergedData$HIV_claim[MergedData$DX2 %in% ICD9 & MergedData$DXVER=="9"] <-
1
MergedData$HIV_claim[MergedData$DX3 %in% ICD9 & MergedData$DXVER=="9"] <-
1
MergedData$HIV_claim[MergedData$DX4 %in% ICD9 & MergedData$DXVER=="9"] <-
1
MergedData$HIV_claim[MergedData$DX5 %in% ICD9 & MergedData$DXVER=="9"] <-
1
MergedData$HIV_claim[MergedData$DX1 %in% ICD10 & MergedData$DXVER=="0"] <-
1
MergedData$HIV_claim[MergedData$DX2 %in% ICD10 & MergedData$DXVER=="0"] <-
1
MergedData$HIV_claim[MergedData$DX3 %in% ICD10 & MergedData$DXVER=="0"] <-
1
MergedData$HIV_claim[MergedData$DX4 %in% ICD10 & MergedData$DXVER=="0"] <-
1
MergedData$HIV_claim[MergedData$DX5 %in% ICD10 & MergedData$DXVER=="0"] <-
1
MergedData2 <- MergedData
MergedData2$HIV_claim9<NA
MergedData2$HIV_claim10<NA
MergedData2$HIV_claim9 <- ((rowSums(MergedData2[, DXS] == ICD9, na.rm=T)
> 0) * 1)
MergedData2$HIV_claim10 <- ((rowSums(MergedData2[, DXS] == ICD10, na.rm=T)
> 0) * 1)
MergedData2$HIV_claim <- ifelse(MergedData2$DXVER == 9,
ifelse(MergedData2$DX1 %in% ICD9 | MergedData2$DX2 %in% ICD9
| MergedData2$DX3 %in% ICD9 | MergedData2$DX4 %in% ICD9
| MergedData2$DX5 %in% ICD9,1,0),0)
library(dplyr)
md %>% gather(dx,v,-DXVER,-ID) %>%
mutate(hiv = ifelse((v %in% ICD9 & DXVER=='9') | (v %in% ICD10 & DXVER=='0'),1,NA)) %>%
filter(hiv==1) %>% group_by(ID) %>% slice(1) %>%
select(ID,hiv) %>% left_join(md,.)
Joining, by = "ID"
DXVER DX1 DX2 DX3 DX4 DX5 ID hiv
1 9 042 4 2 3 79571 345 1
2 9 1 3 2 101 3 123 NA
3 0 1 2 4 2 888 246 1
4 0 2 4 2 3 2 432 NA
5 9 1 3 2 2 2 121 NA
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句