我有一个医生就诊表,其中如果有多个诊断,有时同一遭遇键有多个记录,例如:
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