如何重塑分组行的值变为列的数据? (从长到宽?)

How to reshape data where values of grouped rows become columns? (long to wide?)

我四处寻找合适的答案,但我认为这个问题还没有得到解答。本质上,我有一个长格式的数据框,如下所示:

    ID  event_type event_value
    123    A          1.1      
    123    A          1.2
    123    A          "Hello"
    234    B          "Hello"
    456    A          2.8

其中有多个具有各种值的事件类型。我想要做的是重塑数据,使其看起来像这样

    ID  event_type_A_1 event_type_A_2 event_type_A_3 event_type_B_1
    123    1.1         1.2              "Hello"         NA
    234    NA          NA                NA            "Hello"
    456    2.8         NA                NA             NA

使得新列延伸到任何给定患者的最长事件类型,其余列填充 NA。我已经弄乱了 spread()cast(),但由于某种原因它就是没有点击。谢谢!

您可以使用 dplyrtidyr 执行此操作。诀窍是使用 group_by 并使用 mutaterow_number 添加组内索引。

library(dplyr)
library(tidyr)

df <- data_frame(ID = c(123,123,123,234,456),
                 event_type = c("A","A","A","B","A"),
                 event_value = c(1.1, 1.2, "Hello", "Hello", 2.8))

df %>%
  group_by(ID) %>% 
  mutate(sub_ID = row_number()) %>% 
  unite("ID_type", event_type, sub_ID,remove = TRUE) %>% 
  spread(ID_type, event_value)

打破 dplyr 链条:

  1. 按 ID 分组
  2. row_number()
  3. 创建 sub_ID
  4. event_typesub_IDunite 合并并删除原始列
  5. spread() ID_type 的值来自 event_value