首页 > 解决方案 > 根据特定标准提取数据

问题描述

您好我必须根据某些标准提取数据,但我不知道该怎么做。我有患者住院过一次或多次。每个患者的日期顺序是按递增顺序完成的,即日期 1 在日期 2 之前,后者在日期 3 之前。住院次数没有顺序,只是随机的。诊断是按专业(器官系统)和疾病(在我的情况下是 ICD-10)编码的。即所有"A"都是与器官系统相关的疾病(因此它们属于一个专业)。即使"A01""A02"是不同的疾病。

这是我的数据库的表示。

Patient_ID<-c(rep("A",4),rep("B",3),rep("C",2),rep("D",2),rep("E",6),rep("F",3),"G")
Stay_ID<-c(paste("A",1:4,sep=""),paste("B",1:3,sep=""),paste("C",1:2,sep=""),
          paste("D",1:2,sep=""),paste("E",1:6,sep=""),paste("F",1:3,sep=""),"G2")
Date<-c(1,3,2,4,3,1,2,2,1,1,2,1,3,5,2,4,6,3,1,2,1)
Diagnosis<-c("A01","A01","A02","N01","C01","C01","Z72","E01","F56","A01","A01",
             "B36","B36","B37","F13","F13","K12","A33","A33","B13","O24")

data<-data.frame(Patient_ID,Stay_ID,Date,Diagnosis)

print(data)

   Patient_ID Stay_ID Date Diagnosis
1           A      A1    1       A01
2           A      A2    3       A01
3           A      A3    2       A02
4           A      A4    4       N01
5           B      B1    3       C01
6           B      B2    1       C01
7           B      B3    2       Z72
8           C      C1    2       E01
9           C      C2    1       F56
10          D      D1    1       A01
11          D      D2    2       A01
12          E      E1    1       B36
13          E      E2    3       B36
14          E      E3    5       B37
15          E      E4    2       F13
16          E      E5    4       F13
17          E      E6    6       K12
18          F      F1    3       A33
19          F      F2    1       A33
20          F      F3    2       B13
21          G      G2    1       O24

我的目标是为每个患者提取每个专业的第一次访问。

例如,我必须在患者中仅提取日期1的"A"诊断"A01"(我删除了第二个"A01"和,日期 2 的诊断(我放弃日期 4 的诊断)和诊断。对于患者,我提取了他唯一的诊断。"A02""N01""E""B36""B""B36""B37""F13""F13""K12""G"

标签: r

解决方案


您可以将诊断列分成两部分,然后先提取字母。然后,您可以选择仅包含 Patient_ID 和 first_letter 的 df 上不重复的行。您可能需要按日期对数据进行排序,但我无法确定它是 Stay_ID 还是 Date。假设它是日期列:

# Sort by Patient_ID and Date
data <- data[order(data$Patient_ID, data$Date), ]
# Extract the first letter
data$first_letter <- substring(data$Diagnosis, 1, 1)
# Remove duplicates
data <- data[!duplicated(data[ ,c("Patient_ID", "first_letter")]), ]
data

   Patient_ID Stay_ID Date Diagnosis first_letter
1           A      A1    1       A01            A
4           A      A4    4       N01            N
6           B      B2    1       C01            C
7           B      B3    2       Z72            Z
9           C      C2    1       F56            F
8           C      C1    2       E01            E
10          D      D1    1       A01            A
12          E      E1    1       B36            B
15          E      E4    2       F13            F
17          E      E6    6       K12            K
19          F      F2    1       A33            A
20          F      F3    2       B13            B
21          G      G2    1       O24            O

推荐阅读