我有一个关于使用另一个id变量合并两个id变量的问题。听起来可能有些含糊,请查看下面的
数据集(的样本)Householdid personid gender begin_hh end_hh typhh
A1 q1 male 19490410 20000101 2
A2 q1 male 20000102 20101010 3
C1 q2 0 19891010 20000101 NA
A2 q2 0 20000102 20101010 3
该数据集背后的故事可能如下。在1994年至2000年之间,q1人独居,q2人的家庭状况未知。住户变量和不等于3的家庭变量表明这两个人没有在一起生活。在2000年至2010年期间,两个人结为夫妻,我们可以从以下事实得出结论: )等于3,并且两个人的户口号码相同(即,两者都用A2表示)。如果家庭成员不同,则意味着他们与另一个人结为夫妻。我想将此数据集转换为以下内容:
Householdid personid.male pensionid. female begin_hh end_hh typhh
A1 q1 NA 19490410 20000101 2
A2 q1 q2 20000102 20101010 3
C1 NA q2 19891010 20000101 NA
我尝试使用reshape命令,但是在我的代码中,它也将在两个人不在一起的时期(即,typhh等于2或NA)匹配该personid。有谁知道我怎么能得到这个?感谢您的帮助。
答案 0 :(得分:1)
您可以根据需要使用pivot_wider
中的tidyr
。
library(tidyr)
pivot_wider(df,
id_cols = c(Householdid, begin_hh, end_hh, typhh),
names_from = gender,
values_from = personid,
names_prefix = "person_")
其中df
是要旋转的数据框。
答案 1 :(得分:0)
我们可以使用data.table
dcast
library(data.table)
dcast(setDT(df1)[gender == 0, gender := "female"],
Householdid + begin_hh + end_hh + typhh ~
paste0("person_", gender), value.var = "personid")
# Householdid begin_hh end_hh typhh person_female person_male
#1: A1 19490410 20000101 2 <NA> q1
#2: A2 20000102 20101010 3 q2 q1
#3: C1 19891010 20000101 NA q2 <NA>
df1 <- structure(list(Householdid = c("A1", "A2", "C1", "A2"), personid = c("q1",
"q1", "q2", "q2"), gender = c("male", "male", "0", "0"), begin_hh = c(19490410L,
20000102L, 19891010L, 20000102L), end_hh = c(20000101L, 20101010L,
20000101L, 20101010L), typhh = c(2L, 3L, NA, 3L)),
class = "data.frame", row.names = c(NA,
-4L))