在旋转之后,按R中的公共列值折叠新行

时间:2017-08-16 21:12:04

标签: r dplyr pivot

我有一个数据集,其中包含针对多个患者(USUBJID)进行的9个实验室测试,其中每个实验室(LABCAT)都有自己的行并且每天都进行(LBDY)。我想转置这个,所以每个实验室都是自己的列,每天执行的是值。

enter image description here

我按如下方式执行了一个支点。

library(dplyr)
LB <- lb %>%
   select(USUBJID, LBCAT, LBDY)  %>%
   group_by(USUBJID) %>%
   mutate(visitnum = sequence(n())) %>%
   spread(key= LBCAT, value= LBDY) 

这很好但现在我想合并这些行,因为很多这些实验都是在同一天进行的。因此,我希望在第-21天进行的所有实验一行,第-15行,第二天等等。有一种简单的方法来执行此任务,因为我偶尔遇到它并想要一个长期的解决方案。

enter image description here

我希望数据看起来像这样

       Chemistry   Hematology Immunology   InfectiousDiseases Morphology ...
90301    -21          -21        NA           -21               -21
90301     NA          -15        NA            NA               -15
90301    -2           -2        -2             NA               -2

谢谢!

1 个答案:

答案 0 :(得分:1)

您的代码几乎可以执行此操作,只需按USUBJIDLBCAT进行分组。

LB <- lb %>%
   select(USUBJID, LBCAT, LBDY)  %>%
   group_by(USUBJID, LBCAT) %>%
   mutate(visitnum = sequence(n())) %>%
   spread(key= LBCAT, value= LBDY)