我有一个数据集,其中包含针对多个患者(USUBJID)进行的9个实验室测试,其中每个实验室(LABCAT)都有自己的行并且每天都进行(LBDY)。我想转置这个,所以每个实验室都是自己的列,每天执行的是值。
我按如下方式执行了一个支点。
library(dplyr)
LB <- lb %>%
select(USUBJID, LBCAT, LBDY) %>%
group_by(USUBJID) %>%
mutate(visitnum = sequence(n())) %>%
spread(key= LBCAT, value= LBDY)
这很好但现在我想合并这些行,因为很多这些实验都是在同一天进行的。因此,我希望在第-21天进行的所有实验一行,第-15行,第二天等等。有一种简单的方法来执行此任务,因为我偶尔遇到它并想要一个长期的解决方案。
我希望数据看起来像这样
Chemistry Hematology Immunology InfectiousDiseases Morphology ...
90301 -21 -21 NA -21 -21
90301 NA -15 NA NA -15
90301 -2 -2 -2 NA -2
谢谢!
答案 0 :(得分:1)
您的代码几乎可以执行此操作,只需按USUBJID
和LBCAT
进行分组。
LB <- lb %>%
select(USUBJID, LBCAT, LBDY) %>%
group_by(USUBJID, LBCAT) %>%
mutate(visitnum = sequence(n())) %>%
spread(key= LBCAT, value= LBDY)