【问题标题】:R add rows to dataframe from other dataframe based on column valueR根据列值将行从其他数据帧添加到数据帧
【发布时间】:2021-08-24 15:40:19
【问题描述】:

对于我的论文,我尝试使用来自两种调查(英国选举研究 (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 的解决方案?

非常感谢任何帮助!!!

【问题讨论】:

    标签: r dataframe merge


    【解决方案1】:

    这不是“合并”(或连接)操作,它只是行连接。在 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))
    

    【讨论】:

      猜你喜欢
      • 2021-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      • 2020-01-24
      • 2017-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多