R 以多对多关系重塑高到宽 table

R reshape tall to wide with many to many relationship table

我有一个 table 和 parent 以及他或她的 child 的信息(姓名、年级、年龄)。一个child可以有多个parent,一个parent可以有多个children。我想重塑 table,这样每一行都是唯一的 parent,他或她的所有 children 的信息都标记为 .1、,2 等

原文Table:

ParentID ChildN ChildGrade ChildAge HouseholdID
1 x 10 21 a
2 x 10 21 a
3 z 12 23 b
1 y 13 24 a
2 y 13 24 a
3 t 15 26 b
4 g 16 27 c

目标:

ParentID ChildN.1 ChildGrade.1 ChildAge.1 ChildN.2 ChildGrade.2 ChildAge.2 HouseholdID
1 x 10 21 y 13 24 a
2 x 10 21 y 13 24 a
3 z 12 23 t 15 26 b
4 g 16 27 NA NA NA c

我想知道如何在 R 中实现这一点。非常感谢。

您可以使用 tidyr::pivot_wider 实现您想要的结果,方法是首先为 children 添加一个 id 列:

library(dplyr)
library(tidyr)

df |> 
  group_by(ParentID) |> 
  mutate(child_id = row_number()) |> 
  pivot_wider(values_from = c("ChildN", "ChildGrade",   "ChildAge"), names_from = "child_id",
              names_glue = "{.value}.{child_id}")
#> # A tibble: 4 × 8
#> # Groups:   ParentID [4]
#>   ParentID HouseholdID ChildN.1 ChildN.2 ChildGrade.1 ChildGrade.2 ChildAge.1
#>      <int> <chr>       <chr>    <chr>           <int>        <int>      <int>
#> 1        1 a           x        y                  10           13         21
#> 2        2 a           x        y                  10           13         21
#> 3        3 b           z        t                  12           15         23
#> 4        4 c           g        <NA>               16           NA         27
#> # … with 1 more variable: ChildAge.2 <int>