如何解决将面板数据与横截面数据合并
我正在尝试将纵向数据集与包含两个变量的横截面数据集合并。 ID 可用于合并。
我的两个数据框看起来像这样:
id <- c(1,2,3,4,5)
var1 <- c(1,1,2)
var2 <- c(2,2)
df1 <- c(id,var1,var2)
和
id <- c(1,3)
age <- c(22,24,26,58,60,62,35,37,39)
xvar <- c(5,5,7,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 中的值跟随面板数据中的 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 |
希望大家能帮帮我!非常感谢。
解决方法
您需要使用 merge()
或 dplyr::left_join()
,而不是 bind_rows()
或 rbind()
。
同样在创建数据框时,您应该使用 data.frame()
或 tibble()
,而不是 c()
。
library(dplyr)
id <- c(1,2,3,4,5)
var1 <- c(1,1,2)
var2 <- c(2,2)
df1 <- data.frame(id,var1,var2)
id <- c(1,3)
age <- c(22,24,26,58,60,62,35,37,39)
xvar <- c(5,5,7,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 年 7 月 20 日创建
,使用 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。