首页 文章

如何基于旧数据框生成,填充和更新新数据框?

提问于
浏览
-1

我有一个数据框,其中包含过去10年中具有诊断代码历史的患者;就像是:

Patient_ID      Diagnosis_Codes     Diag_Code_Description

A               1                   1:Hypertension
A               1                   1:Hypertension
A               4                   4:Diabetes

B               3                   3:Depression
B               3                   3:Depression

C               1                   1:Hypertension
C               4                   4:Diabetes
C               4                   4:Diabetes
…               …                   …

我想提取或制作一个数据框,其中包含每个诊断代码的唯一行Patient_ID和分隔列,其中包含每个患者的代码发生频率,如下表所示,但我不知道如何处理并执行此任务R:

Patient_ID  Diag1_freq  Diag2_freq  Diag3_freq  Diag4_freq  …
A           2           0           0           1           …
B           0           0           2           0           …
C           1           0           0           2           …
…           …           …           …           …           …

实际数据有近6万名患者,诊断代码范围在1到999之间;所以结果数据帧将有60 000行和999列 . 真实数据集中的Patient_ID是数字而不是字符串,但我使用“A”,“B”和“C”来避免混淆 . 我感谢任何帮助,并提前多多感谢 .

2 回答

  • 0

    这是一种使用诊断值创建新变量的方法,然后使用 reshape2 包中的 cast() 函数来转换数据 .

    rawData <- "Patient_ID      Diagnosis_Codes     Diag_Code_Description
      A               1                   1:Hypertension
      A               1                   1:Hypertension
      A               4                   4:Diabetes
      B               3                   3:Depression
      B               3                   3:Depression
      C               1                   1:Hypertension
      C               4                   4:Diabetes
      C               4                   4:Diabetes"
    
    theData <- read.table(textConnection(rawData),header=TRUE)
    library(reshape2)
    theData$variable <- sprintf("diag%04d",theData$Diagnosis_Codes)
    castData <- dcast(theData,Patient_ID ~ variable)
    

    输出看起来像这样 .

    enter image description here

    问候,

    莱恩

  • 0

    您可以使用 aggregate()dplyr::group_by()%>%summarise() 或者您可以使用data.table中的一些函数以及更多信息,请点击此处Data.table

    使用dplyr的示例:

    a <- group_by(dataframe, Patient_ID)
    

    这将在唯一的patient_id级别汇总数据 .

    b <- summarise(a,
                 Diag1_freq  = length(Diagnosis_Codes[Diagnosis_Codes==1]),
                 Diag2_freq = ...
    ...)
    

相关问题