将二进制变量应用于R

时间:2017-02-07 00:16:59

标签: r records indicator grepl

我有一张医生就诊表,如果有多个诊断,有时会有同一个遭遇密钥的多个记录,例如:

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)

但这只会指定&#34; 1&#34;到具有该Diag_Key值的单个记录,并且我不确定如何将其应用于具有相同Enc_Key值的其余记录

2 个答案:

答案 0 :(得分:0)

使用==直接比较值,%in%使用多个值进行过滤。例如,这将标识具有一些Enc_Keys的所有Diag_Key == 765

    dat$Enc_Key[dat$Diag_Key == 765]

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

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

答案 1 :(得分:0)

使用mutate中的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