使用基于id的tidyverse将行合并为一 数据

问题描述

我有一个面板数据集,其中包含三种类型的ID:

  1. 数据中每个唯一个体的ID,称为xwaveid
  2. 由xwaveid与孩子匹配的母亲的ID,称为mother_id。此ID与他们的xwaveid相同。
  3. 父亲的ID与母亲的ID。

父母的ID与孩子的xwaveid匹配,但该行仅包含孩子的变量。父亲和母亲也是如此。即所有变量都链接到个人xwaveid。因此数据看起来像这样:

xwaveid mother_id father_id weight wave 
001     005       006       85     a
005     na        na        96     a
006     na        na        99     a
001     005       006       70     b
005     na        na        90     b
006     na        na        94     b

其中ID 001是孩子的唯一ID,而005和006既是父母的xwaveid,又是他们自己的唯一ID,并附加了他们的体重数据。我想做这种结构:

xwaveid_child xwaveid_mother xwaveid_father child_weight mother_weight father_weight wave
001           005            006            85           96            99            a
001           005            006            70           90            94            b

我什至不知道从哪里开始,将不胜感激!

非常感谢

解决方法

NA不是真实的NA,它是字符串“ na”。将其转换为NA,然后将fill的NA元素与mother_id,father_id中的先前非NA元素一起,创建一个序列列(rowid)并整形为“宽”格式({ {1}})

pivot_wider

数据

library(dplyr)
library(data.table)
library(tidyr)
df1 %>%
   mutate(across(c(mother_id,father_id),na_if,"na")) %>% 
   fill(c(mother_id,father_id)) %>%
   mutate(rn = rowid(mother_id,father_id,wave)) %>% 
   pivot_wider(names_from = rn,values_from = c(xwaveid,weight))

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...