将二进制变量应用于 R 中同一键的多个记录



我有一个医生就诊表,其中如果有多个诊断,有时同一遭遇键有多个记录,例如:

Enc_Key | Patient_Key |   Enc_Date   | Diag_Key
  123         789         20160512       765
  123         789         20160512       263
  123         789         20160515       493
  546         013         20160226       765      
  564         444         20160707       004
  789         226         20160707       546
  789         226         20160707       765

我正在尝试根据Diag_Key列的值创建一个指示符变量,但我需要将其应用于整个遭遇。换句话说,如果我得到诊断代码的值"756",那么我想将指示符变量的"1"应用于与Diag_Code值为 756 的记录具有相同Enc_Key的每条记录,如下所示:

Enc_Key | Patient_Key |   Enc_Date   | Diag_Key  | Diag_Ind
  123         789         20160512       765           1
  123         789         20160512       263           1
  123         789         20160515       493           1
  546         013         20160226       723           0
  564         444         20160707       004           0
  789         226         20160707       546           1
  789         226         20160707       765           1

我似乎无法找到一种将此二进制指标应用于多个不同记录的方法。我一直在使用类似于下面的一行代码:

tbl$Diag_Ind <- ifelse(grepl('765',tbl$Diag_Key),1,0)

但这只会将值"1"分配给具有该Diag_Key值的单个记录,并且我不确定如何将其应用于具有相同Enc_Key值的其余记录

使用 == 直接比较值,%in%使用多个值进行筛选。例如,这将识别具有某些Diag_Key == 765的所有Enc_Keys

    dat$Enc_Key[dat$Diag_Key == 765]

然后只需按Enc_Key选择数据并将布尔值转换为整数:

    as.integer( 
      dat$Enc_Key %in% unique(dat$Enc_Key[dat$Diag_Key == 765])
    )

使用 mutate from dplyr .可能是原始数据中所需的输出中有拼写错误Enc_Key = 546 765但在所需的数据框中没有。

 library(dplyr)
 input = read.table(text = "Enc_Key  Patient_Key    Enc_Date    Diag_Key
 123         789         20160512       765
 123         789         20160512       263
 123         789         20160515       493
 546         013         20160226       765      
 564         444         20160707       004
 789         226         20160707       546
 789         226         20160707       765", header = TRUE, stringsAsFactors = FALSE)
 input %>% group_by(Enc_Key) %>%
     mutate(Diag_Ind = max(grepl('765',Diag_Key))) 

输出:

    Enc_Key Patient_Key Enc_Date Diag_Key Diag_Ind
 1     123         789 20160512      765        1
 2     123         789 20160512      263        1
 3     123         789 20160515      493        1
 4     546          13 20160226      765        1
 5     564         444 20160707        4        0
 6     789         226 20160707      546        1
 7     789         226 20160707      765        1

更正后的拼写错误输出是

    Enc_Key Patient_Key Enc_Date Diag_Key Diag_Ind
 1     123         789 20160512      765        1
 2     123         789 20160512      263        1
 3     123         789 20160515      493        1
 4     546          13 20160226      723        0
 5     564         444 20160707        4        0
 6     789         226 20160707      546        1
 7     789         226 20160707      765        1

最新更新