【问题标题】:Apply binary variable to multiple records of same key in R将二进制变量应用于R中相同键的多个记录
【发布时间】:2017-02-07 00:16:58
【问题描述】:

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

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”应用于与具有相同 Enc_Key 的记录的每个记录,该记录的 Diag_Code 值为 756,如下:

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 值的其余记录

【问题讨论】:

  • as.integer(duplicated(tbl$Enc_Key) | duplicated(tbl$Enc_Key, fromLast = TRUE))?
  • 您的示例和描述中的某些数据正在发生变化,但 ave 允许您为每个组生成一个值:ave(df$Diag_Key, df$Enc_Key, FUN = function(x){any(x == 765)}) 或者只是使用 dplyr 或 data.table 进行分组。

标签: r records indicator grepl


【解决方案1】:

使用== 直接比较值,%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])
    )

【讨论】:

    【解决方案2】:

    使用dplyr 中的mutate。可能是您在原始数据Enc_Key = 546765 中的所需输出中有错字,但在所需的数据框中没有。

     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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-25
      • 1970-01-01
      • 2022-07-11
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多