首页 > 解决方案 > R根据列值将行从其他数据帧添加到数据帧

问题描述

在我的论文中,我尝试使用来自两种调查(英国选举研究(BES)和英国社会态度调查(BSA))的几个变量,并将它们组合成一个数据集。目前,我有两个数据集,一个带有 BES 数据,看起来像这样(简化版):

| year | class   | education | gender | age |
| ---- | -----   | --------- | ------ | --- |
| 1992 | working | A-levels  | female | 32  |
| 1992 | middle  | GCSE      | male   | 49  |
| 1997 | lower   | Undergrad | female | 24  |
| 1997 | middle  | GCSE      | male   | 29  |

BSA 数据如下所示(再次简化):

| year | class   | education | gender | age |
| ---- | -----   | --------- | ------ | --- |
| 1992 | middle  | A-levels  | male   | 22  |
| 1993 | working | GCSE      | female | 45  |
| 1994 | upper   | Postgrad  | female | 38  |
| 1994 | middle  | GCSE      | male   | 59  |

基本上,我想做的是将两者组合成一个数据框,如下所示:

| year | class   | education | gender | age |
| ---- | -----   | --------- | ------ | --- |
| 1992 | working | A-levels  | female | 32  |
| 1992 | middle  | GCSE      | male   | 49  |
| 1992 | middle  | A-levels  | male   | 22  |
| 1993 | working | GCSE      | female | 45  |
| 1994 | upper   | Postgrad  | female | 38  |
| 1994 | middle  | GCSE      | male   | 59  |
| 1997 | lower   | Undergrad | female | 24  |
| 1997 | middle  | GCSE      | male   | 29  |

我在谷歌上搜索了很多关于连接和合并的信息,但我无法以一种正常工作的方式弄清楚。据我了解,我相信我应该加入“按”年份变量,但这是正确的吗?以及如何防止它占用大量内存来执行计算(BES 的实际数据集约为 30k,BSA 的实际数据集约为 130k)?是否有在 R 中使用 dplyr 或 data.tables 的解决方案?

任何帮助深表感谢!!!

标签: rdataframemerge

解决方案


这不是“合并”(或连接)操作,它只是行连接。在 R 中,这是通过rbind(适用于matrixdata.frame使用不同的方法)完成的。(从透视角度来看,还有cbind,它按列连接。此处不适用。)

碱基R

rbind(BES, BSA)
#   year   class education gender age
# 1 1992 working  A-levels female  32
# 2 1992  middle      GCSE   male  49
# 3 1997   lower Undergrad female  24
# 4 1997  middle      GCSE   male  29
# 5 1992  middle  A-levels   male  22
# 6 1993 working      GCSE female  45
# 7 1994   upper  Postgrad female  38
# 8 1994  middle      GCSE   male  59

其他方言

dplyr::bind_rows(BES, BSA)
data.table::rbindlist(list(BES, BSA))

推荐阅读