问题描述
我有一个面板数据集,其中包含三种类型的ID:
- 数据中每个唯一个体的ID,称为xwaveid
- 由xwaveid与孩子匹配的母亲的ID,称为mother_id。此ID与他们的xwaveid相同。
- 父亲的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))