我是一个初学者,面临着一项艰巨的任务,而我使用搜索功能发现的所有典型的从长到宽的重塑工具并没有真正为我完成这项工作。如果有人可以帮助我,我会很高兴。
我尝试实现以下目标:
我有一个患者数据,其中每个患者都有唯一的患者编号,但是多次住院会导致每人出现多个病例。我想处理这些情况。问题是,我有每种情况的所有诊断,但不是每个人都有相同的诊断次数,而且我不知道如何在每次已有诊断后告诉R创建新的诊断(和诊断日期)变量。非常感谢您的帮助!
所以,我有一个庞大的数据集,看起来像这样:
Patient Case Diagnosis DateOfDiagnosis
1 John Doe 1 A 2010-10-10
2 John Doe 1 B 2010-10-10
3 John Doe 1 C 2010-10-10
4 Peter Griffin 2 D 2010-10-11
5 Peter Griffin 2 E 2010-10-11
6 Homer Simpson 3 F 2010-10-12
7 Homer Simpson 4 G 2010-10-13
我需要逐个案例,并且需要所有诊断信息和它们在单独变量中的日期。这没有问题,但是病例或诊断没有模式,因此一些患者只有一个病例,其他5个,而某些病例有1个,另外5个具有相应日期的诊断。所以我需要的是这样的:
Patient Case Diag1 DateOfDiag1 Diag2 DateOfDiag2 Diag3 DateOfDiag3 ....
1 John Doe 1 A 2010-10-10 B 2010-10-10 C 2010-10-10
2 Peter Grif 2 D 2010-10-11 E 2010-10-11 NA NA
3 Homer Simp 3 F 2010-10-12 NA NA NA NA
4 Homer Simp 4 G 2010-10-13 NA NA NA NA
我的示例代码是:
Patient <- c('John Doe','John Doe','John Doe', 'Peter Griffin','Peter Griffin', 'Homer Simpson', 'Homer Simpson')
Case <- c(1,1,1,2,2,3,4)
Diagnosis <- c('A','B','C','D','E','F','G')
DateOfDiagnosis <- as.Date(c('2010-10-10','2010-10-10','2010-10-10','2010-10-11','2010-10-11','2010-10-12','2010-10-13'))
df<-data.frame(Patient, Case, Diagnosis, DateOfDiagnosis)
非常感谢您的帮助!亲切的问候,扬
pivot_wider
创建唯一列后,可以使用。
library(dplyr)
library(tidyr)
df %>%
group_by(Patient, Case) %>%
mutate(row = row_number()) %>%
pivot_wider(values_from = c(Diagnosis, DateOfDiagnosis), names_from = row)
# Patient Case Diagnosis_1 Diagnosis_2 Diagnosis_3 DateOfDiagnosis_1 DateOfDiagnosis_2 DateOfDiagnosis_3
# <fct> <dbl> <fct> <fct> <fct> <date> <date> <date>
#1 John Doe 1 A B C 2010-10-10 2010-10-10 2010-10-10
#2 Peter Griffin 2 D E NA 2010-10-11 2010-10-11 NA
#3 Homer Simpson 3 F NA NA 2010-10-12 NA NA
#4 Homer Simpson 4 G NA NA 2010-10-13 NA NA
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句