【问题标题】:Binary variable to multiple records of same key based on characters in another field in R基于R中另一个字段中的字符的相同键的多个记录的二进制变量
【发布时间】:2017-02-07 16:09:33
【问题描述】:

我有一个医生就诊表,如果有多个诊断,有时会有多个记录用于同一个遭遇键 (Enc_Key),例如:

Enc_Key | Patient_Key |   Enc_Date   | Diag
  123         789         20160512      asthma
  123         789         20160512      fever
  123         789         20160515      coughing
  546         013         20160226      flu      
  564         444         20160707      laceration
  789         226         20160707      asthma
  789         226         20160707      fever

我正在尝试根据字符变量Diag 的值创建一个指示变量Diag_Ind,但我需要在整个遭遇中应用它。换句话说,如果我为记录获得Diag 的“哮喘”值,那么我想将Diag_Ind 的“1”应用于具有相同Enc_Key 的每条记录,如下所示:

Enc_Key | Patient_Key |   Enc_Date   | Diag            | Diag_Ind
  123         789         20160512      asthma             1
  123         789         20160512      fever              1
  123         789         20160515      coughing           1
  546         013         20160226      flu                0     
  564         444         20160707      laceration         0
  789         226         20160707      asthma attack      1
  789         226         20160707      fever              1

我似乎无法找到将这个二进制指标应用于多条记录的方法。我一直在使用类似于这样的一行代码:

tbl$Diag_Ind <- ifelse(grepl('asthma',tolower(tbl$Diag)),1,0)

但这只会将值“1”分配给具有该 Diag 值的单个记录,例如:

Enc_Key | Patient_Key |   Enc_Date   | Diag            | Diag_Ind
  123         789         20160512      asthma             1
  123         789         20160512      fever              0
  123         789         20160515      coughing           0
  546         013         20160226      flu                0     
  564         444         20160707      laceration         0
  789         226         20160707      asthma attack      1
  789         226         20160707      fever              0

我不确定如何将其应用于具有相同 Enc_Key 值的其余记录

【问题讨论】:

    标签: r binary records indicator


    【解决方案1】:

    我们可以使用base R ave 来检查每组Enc_Key 中的任何值是否包含asthma

    df$Diag_Ind<- ave(df$Diag, df$Enc_Key,FUN=function(x) as.integer(any(grep("asthma", x))))
    
    df
    #  Enc_Key Patient_Key Enc_Date       Diag Diag_Ind
    #1     123         789 20160512     asthma        1
    #2     123         789 20160512      fever        1
    #3     123         789 20160515   coughing        1
    #4     546          13 20160226        flu        0
    #5     564         444 20160707 laceration        0
    #6     789         226 20160707     asthma        1
    #7     789         226 20160707      fever        1
    

    dplyr类似的解决方案

    library(dplyr)
    df %>%
     group_by(Enc_Key) %>%
     mutate(Diag_Ind = as.numeric(any(grep("asthma", Diag))))
    
    #   Enc_Key Patient_Key Enc_Date    Diag    Diag_Ind
    #    (int)       (int)    (int)     (fctr)    (dbl)
    #1     123         789 20160512     asthma        1
    #2     123         789 20160512      fever        1
    #3     123         789 20160515   coughing        1
    #4     546          13 20160226        flu        0
    #5     564         444 20160707 laceration        0
    #6     789         226 20160707     asthma        1
    #7     789         226 20160707      fever        1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 2021-07-16
      • 2018-03-16
      相关资源
      最近更新 更多