我有一张医生就诊表,如果有多个诊断,有时会有同一个遭遇密钥的多个记录,例如:
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值的其余记录
答案 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