【问题标题】:matching two id variables to a household variable将两个 id 变量与家庭变量匹配
【发布时间】:2019-11-28 18:22:51
【问题描述】:

我有一个关于使用另一个 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 人的家庭状况未知。这两个人没有住在一起是由不同的familyid变量和不等于3的typehousehold变量表示的。在2000年到2010年之间,两个人形成了一对,我们可以从typehousehold(typhh ) 等于 3,并且两个人的家庭 ID 相同(即两者都由 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 命令,但在我的代码中,它也会匹配两个人不在一起期间的 personid(即 typhh 等于 2 或 NA)。有谁知道我怎么能得到这个?我很感激任何帮助。

【问题讨论】:

  • 尝试使用pivot_wider 例如:pivot_wider(id_cols = c(Householdid, begin_hh, end_hh, typhh), names_from = gender, values_from = personid, names_prefix = "person_")
  • @Ben 请考虑将此作为答案发布,它提供了 OP 要求的内容。

标签: r


【解决方案1】:

您可以使用tidyr 中的pivot_wider 来满足您的需要。

library(tidyr)

pivot_wider(df, 
            id_cols = c(Householdid, begin_hh, end_hh, typhh), 
            names_from = gender, 
            values_from = personid, 
            names_prefix = "person_")

其中df 是要旋转的数据框。

【讨论】:

    【解决方案2】:

    我们可以使用data.tabledcast

    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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 2020-07-01
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      相关资源
      最近更新 更多