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

hee*_*ter 3 casting r reshape melt

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

    ID  event_type event_value
    123    A          1.1      
    123    A          1.2
    123    A          "Hello"
    234    B          "Hello"
    456    A          2.8
Run Code Online (Sandbox Code Playgroud)

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

    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
Run Code Online (Sandbox Code Playgroud)

这样新列就可以延伸到任何给定患者的最长事件类型,其余的则用 NA 填充。spread()我已经用and搞砸了cast(),但由于某种原因它只是没有点击。谢谢!

Jak*_*upp 5

您可以使用dplyr和 来完成此操作tidyr。技巧是使用和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)
Run Code Online (Sandbox Code Playgroud)

打破dplyr链条:

  1. 按ID分组
  2. 创建 sub_IDrow_number()
  3. 合并event_typeandsub_IDunite删除原始列
  4. spread()将 ID_type 放入具有以下值的列中event_value