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

时间:2017-11-22 17:15:26

标签: r

我有一个数据框,其中包含过去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 :(得分: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 = ...
...)

答案 1 :(得分:0)

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

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

的问候,

莱恩