【问题标题】:Merge paneldata with cross-section data将面板数据与横截面数据合并
【发布时间】:2021-07-20 19:03:05
【问题描述】:

我正在尝试将纵向数据集与包含两个变量的横截面数据集合并。 ID 可用于合并。

我的两个数据框看起来像这样:

id <- c(1, 2, 3, 4, 5)
var1 <- c(1, 2, 1, 1, 2) 
var2 <- c(2, 2, 1, 1, 2)
df1 <- c(id, var1, var2)

id <- c(1, 1, 1, 2, 2, 2, 3, 3, 3)
age <- c(22, 24, 26, 58, 60, 62, 35, 37, 39)
xvar <- c(5, 5, 5, 7, 7, 7, 1, 1, 1)

df2 <- c(id, age, xvar)

我使用以下代码来组合两个数据框:

the_df <- bind_rows(df1, df2) %>% group_by(id) %>% 
  arrange(id)

然而,它所做的只是在 df1 的所有变量中添加带有 NA 的新行,并且只有 df2 中的值如下:

|id|age|xvar|var1|var2|
|--|---|----|----|----|
| 1| 22| 5  |NA  |NA  |
| 1| 24| 5  |NA  |NA  |
| 1| 26| 5  |NA  |NA  |
| 1| NA| NA |1   | 1  |
| 2| 58| 7  |NA  |NA  |
| 2| 60| 7  |NA  |NA  |
| 2| 62| 7  |NA  |NA  |
| 2| NA| NA |2   |1   |

相反,我只希望 df2 中的值跟随 paneldata 中的 id,而不是添加另一个 id 行。结果应该是这样的:

|id|age|xvar|var1|var2|
|--|---|----|----|----|
| 1| 22| 5  |1   |1   |
| 1| 24| 5  |1   |1   |
| 1| 26| 5  |1   |1   |
| 2| 58| 6  |2   |1   |
| 2| 60| 6  |2   |1   |
| 2| 62| 6  |2   |1   |

希望任何人都可以在这里帮助我!非常感谢。

【问题讨论】:

    标签: r merge panel


    【解决方案1】:

    您需要使用merge()dplyr::left_join(),而不是bind_rows()rbind()

    此外,在创建数据框时,您应该使用data.frame()tibble(),而不是c()

    library(dplyr)
    id <- c(1, 2, 3, 4, 5)
    var1 <- c(1, 2, 1, 1, 2) 
    var2 <- c(2, 2, 1, 1, 2)
    df1 <- data.frame(id, var1, var2)
    
    id <- c(1, 1, 1, 2, 2, 2, 3, 3, 3)
    age <- c(22, 24, 26, 58, 60, 62, 35, 37, 39)
    xvar <- c(5, 5, 5, 7, 7, 7, 1, 1, 1)
    
    df2 <- data.frame(id, age, xvar)
    
    df2 %>% 
      left_join(df1, by = "id")
    #>   id age xvar var1 var2
    #> 1  1  22    5    1    2
    #> 2  1  24    5    1    2
    #> 3  1  26    5    1    2
    #> 4  2  58    7    2    2
    #> 5  2  60    7    2    2
    #> 6  2  62    7    2    2
    #> 7  3  35    1    1    1
    #> 8  3  37    1    1    1
    #> 9  3  39    1    1    1
    

    reprex package (v2.0.0) 于 2021-07-20 创建

    【讨论】:

      【解决方案2】:

      使用merge 的基本 R 选项

      > merge(df1, df2, all.y = TRUE)
        id var1 var2 age xvar
      1  1    1    2  22    5
      2  1    1    2  24    5
      3  1    1    2  26    5
      4  2    2    2  58    7
      5  2    2    2  60    7
      6  2    2    2  62    7
      7  3    1    1  35    1
      8  3    1    1  37    1
      9  3    1    1  39    1
      

      【讨论】:

        猜你喜欢
        • 2021-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-31
        • 2017-10-16
        • 2016-06-07
        • 2021-01-24
        相关资源
        最近更新 更多