微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将面板数据与横截面数据合并

如何解决将面板数据与横截面数据合并

我正在尝试将纵向数据集与包含两个变量的横截面数据集合并。 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?