r重塑高到宽,有许多关系表

发布于 2025-01-18 19:11:14 字数 3659 浏览 1 评论 0原文

我有一张桌子和父母及其孩子的信息(名称,年级,年龄)。一个孩子可以有多个父母,一个父母可以有多个孩子。我想重塑桌子,以便每行都是一个独特的父母,所有他或她的孩子的信息都标有.1,2等。

原始表:

parentidchildn childnchildgradechildgrade childingheookerid
1x1021a
2x1021a
3z1223b
1y1324A
2y1324A
3T1526B
4G1627C

目标:

parentidchildn.1Childgrade.1Childage.1 Childn.2Childn.2Childgrade.2Childge.2 ersevelage.2ereppordid
1x1021y1324a
2x1021y1324a
3z1223t1526b
4g1627na nan na nn na nc

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

I have a table with parent and his or her child's info(name, grade, age). One child can have multiple parents and one parents can have multiple children. I want to reshape the table so each row will be an unique parent with all his or her children's information labeled as .1, ,2 etc.

Original Table:

ParentIDChildNChildGradeChildAgeHouseholdID
1x1021a
2x1021a
3z1223b
1y1324a
2y1324a
3t1526b
4g1627c

Goal:

ParentIDChildN.1ChildGrade.1ChildAge.1ChildN.2ChildGrade.2ChildAge.2HouseholdID
1x1021y1324a
2x1021y1324a
3z1223t1526b
4g1627NANANAc

I want to know how to achieve this in R. Thanks a lot.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

只有影子陪我不离不弃 2025-01-25 19:11:14

您可以使用tidyr :: Pivot_wider首先添加儿童的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>

You could achieve your desired result using tidyr::pivot_wider by first adding an id column for the children:

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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文