2

我一直在尝试合并在不同年份从不同人那里获得的横截面数据集。

对于数据收集,每年都会提出大部分相同的问题,但添加或删除了一些问题。因此,有一些变量在数据集之间匹配,而其他一些变量不匹配但仍然很重要。

对你们所有人来说可能很重要的一点是,每年有不同数量的受访者。因此,并非所有变量的每个匹配变量都具有相同数量的元素。

对于上下文,我正在尝试合并三个数据集。但是为了简单起见,我将用 3 个中的 2 个来说明我的以下示例。

我已经尝试了 all = TRUE 的 match() 函数,但是我使用这个函数创建的数据集从我想要堆叠的向量中产生了 3 个向量。例如

    internet.x internet.y internet.z
        3          3         7 
        6          4         5

我也尝试过 plyr 包中的 rbind() 函数,但是这种合并模式会删除没有匹配元素的列。

例如,因为data: year2017data:year2018都有一个变量标题YEAR例如

    data:year2017  data:year2018
    YEAR              YEAR
    2017              2018
    2017              2018
    2017              2018
    2017              2018
    2017              2018
    2017              2018
    2017              2018
    2017              2018

YEAR变量在合并产品中被删除,因为同一变量在不同数据集中具有不同的值或元素。

所以......我想保留在最终产品中的是一个合并的结果

    data:MERGED
    YEAR
    2017              
    2017         
    2017         
    2017    
    2017
    2017         
    2017              
    2017
    2018              
    2018
    2018
    2018
    2018
    2018
    2018
    2018

另一个示例是以下变量 = var1,它在数据集之间命名相同

    data:year2016  data:year2017   data:year2018  
    var1               var1             var1 
    3                   5                2 
    2                   3                1 
    4                   7                7 
    5                   8                3 
    6                   3                4 

理想的结果是

    data:MERGEDFINAL
    var1
     3
     2
     4
     5
     6
     5
     3
     7
     8
     3
     2
     1 
     7
     3
     4 

我希望发生的是,对于跨数据集相同的所有变量,应该进行堆叠操作。对于不相同的变量,堆叠应该仍然发生,但对于在没有为该变量收集数据的年份进行调查的受访者来说,应该包含 NA。

如果你们都可以把你们的脑力和经验结合起来,帮我解决这个问题,那就太好了:):):)

4

1 回答 1

2

库中的bind_rows()功能dplyr就是您所需要的!要将三个数据集“合并”为一个,同时尊重列名,请使用如下命令:

library(dplyr)
dfAll<-bind_rows(dfA, dfB, dfC)

编辑:更新,直接调用所有三个数据集。删除了第一次发布的中间步骤。

于 2019-08-14T17:54:28.290 回答