HCUP宽格式数据中手术时序对比变量创建技术求助
问题描述
在HCUP数据子集中,每个pr列对应的prday列记录了对应ICD编码手术的住院日。我已经基于pr列创建了var1、var2、measure1、measure2的存在标识变量,现在需要创建以下8个时序对比变量:
var1_before_measure_1:若var1对应的prday ≤ measure1对应的prday则为1,否则为0
var1_before_measure_2:若var1对应的prday ≤ measure2对应的prday则为1,否则为0
var1_after_measure_1:若var1对应的prday > measure1对应的prday则为1,否则为0
var1_after_measure_2:若var1对应的prday > measure2对应的prday则为1,否则为0
var2_before_measure_1:若var2对应的prday ≤ measure1对应的prday则为1,否则为0
var2_before_measure_2:若var2对应的prday ≤ measure2对应的prday则为1,否则为0
var2_after_measure_1:若var2对应的prday > measure1对应的prday则为1,否则为0
var2_after_measure_2:若var2对应的prday > measure2对应的prday则为1,否则为0
以下是我已完成的R代码,请求技术协助:
require(tidyverse) #> Loading required package: tidyverse df <- structure(list(pr1 = c("3531", "0066", "3761", "3523", "3524", "3524", "3523", "3524", "3521", "3613"), pr2 = c("3597", "3768", "3597", "8856", "8856", "311", "3611", "3611", "3721", "3523"), pr3 = c("0066", "3723", "8872", "3761", "3613", "9672", "3961", "3961", "3523", "3722"), pr4 = c("9960", "3761", "4223", "3768", "3615", "3761", "3964", "3964", "3761", "3531"), pr5 = c("3893", "3597", "", "8872", "3761", "3611", "9920", "0017", "3961", "3761"), pr6 = c("3961", "3531", "", "3961", "8872", "3615", "0017", "8872", "9604", "0066"), pr7 = c("3722", "", "", "9960", "3961", "3749", "8964", "9672", "3404", "8856" ), pr8 = c("8853", "", "", "3893", "8872", "3532", "9671", "9904", "8872", "3964"), pr9 = c("0041", "", "", "3723", "", "3957", "3995", "9907", "9390", "3606"), pr10 = c("8856", "", "", "3891", "", "387", "3893", "9905", "9904", "0040"), pr11 = c("9604", "", "", "8872", "", "8872", "", "9915", "9962", "0045"), pr12 = c("", "", "", "9604", "", "3961", "", "3324", "9671", "9671"), pr13 = c("", "", "", "9671", "", "3961", "", "8964", "8872", "9604"), pr14 = c("", "", "", "", "", "3322", "", "9604", "8872", "8872"), pr15 = c("", "", "", "", "", "3404", "", "", "3897", ""), prday1 = c(1, 1, 2, 8, 0, 3, 0, 0, 12, 0), prday2 = c(1, 1, 2, 7, 0, 43, 0, 0, 0, 0), prday3 = c(0, 1, 2, 8, 0, 3, 0, 0, 0, 0), prday4 = c(6, 1, 2, 12, 0, 3, 0, 0, 0, 0), prday5 = c(0, 1, NA, 8, 0, 3, 0, 0, 0, 0), prday6 = c(1, 1, NA, 8, 0, 3, 0, 0, 14, 0), prday7 = c(0, NA, NA, 12, 0, 3, 0, 0, 16, 0), prday8 = c(0, NA, NA, 0, 0, 3, 0, 0, 6, 0), prday9 = c(0, NA, NA, 7, NA, 3, 1, 0, 0, 0), prday10 = c(0, NA, NA, 0, NA, 43, 1, 1, 2, 0), prday11 = c(7, NA, NA, 5, NA, 3, NA, 3, 15, 0), prday12 = c(NA, NA, NA, 12, NA, 3, NA, 10, 14, 1), prday13 = c(NA, NA, NA, 12, NA, 3, NA, 10, 1, 1), prday14 = c(NA, NA, NA, NA, NA, 43, NA, 10, 6, 7), prday15 = c(NA, NA, NA, NA, NA, 18, NA, NA, 9, NA)), row.names = c(NA, 10L), class = "data.frame") var_1_code<-c("3523", "3524") var_2_code<-c("3597") measure_1_code<-c("3761") measure_2_code<-c("3768") find_icd10=function(x) {if_any(starts_with("pr"),# apply ifelse() to columns start with `pr` ~ str_detect(.x, x),1,0)} #use str_detect() to find values within all `pr` columns ## `code` function aims at allowing multiple values to pass to find_icd10 ## e.g. ## > mutate(df, icd3509=find_icd10 (code("^3501|^3502|^3509"))) code = function(x) {paste(paste0(rep("^"), # this will add ^ to the begning of each element of the vector, so a value from the middle of a long cell won't be included by mistake x), collapse = "|")} # this will allow evaluating multiple elements in a vector without errors from str_detect() df<-df %>% mutate( var_1=find_icd10(code(var_1_code)), var_2=find_icd10(code(var_2_code)), measure_1=find_icd10(code(measure_1_code)), measure_2=find_icd10(code(measure_2_code)), # var1_before_measure_1 # var1_before_measure_2 # var1_after_measure_1 # var1_after_measure_2 # var2_before_measure_1 # var2_before_measure_2 # var2_after_measure_1 # var2_after_measure_2 ) df $var_1 %>% table #> . #> TRUE #> 7 df $var_2 %>% table #> . #> FALSE TRUE #> 2 3 df $measure_1 %>% table #> . #> TRUE #> 7 df $measure_2 %>% table #> . #> FALSE TRUE #> 2 2
内容的提问来源于stack exchange,提问作者naj_md
相关产品推荐
相关产品推荐

