合并两个不同长度的数据帧时重复某些列(粘贴?)

时间:2019-02-16 11:48:12

标签: r

我有两个数据框用于事件研究,并且在准备数据进行分析时有些费力。 df1有两行,其中包含公司ID和事件日期。有些公司有多个活动日期,因此每个活动日期都会列出公司ID(这意味着列数比唯一公司ID还要多)。另一个(df2)具有每个公司的股价:第1行是公司ID,下面的每一行是该公司在第1列中指定的不同日期的股价。

我想合并(或粘贴?)这两个数据框,以便对于df1中的每个公司ID,它会将低于df2的匹配公司ID(股价)的信息复制到自身。

我一直在寻找解决方案,但是由于我的搜索没有明显的结果,因此我目前似乎搜索不佳。我尝试了不同的合并命令和expand.grid,但是我对r感到生疏。

df1 <- data.frame(X1 = c("Event date","Company ID"),
               X2 = c("2018-01-01","AA"),
               X3 = c("2017-05-03","BB"),
               X4 = c("2016-04-08","CC"),
               X5 = c("2015-02-02","BB"))
df2 <- data.frame(X1 = c("Date","2018-12-31","2018-01-01","2017-05-03","2016-12-31","2016-04-08","2015-02-02"),
               X2 = c("AA",100,102,101,98,99,99),
               X3 = c("BB",85,78,80,77,75,74),
               X4 = c("CC",55,53,54,55,54,54))


df-desired <- data.frame(X1 = c("Event date","Company ID","2018-12-31","2018-01-01","2017-05-03","2016-12-31","2016-04-08","2015-02-02"),
             X2 = c("2018-01-01","AA",100,102,101,98,99,99),
             X3 = c("2017-05-03","BB",85,78,80,77,75,74),
             X4 = c("2016-04-08","CC",55,53,54,55,54,54),
             X5 = c("2015-02-02","BB",85,78,80,77,75,74))

我当前的数据类似于df1和df2,而我想要的结果是df-desired。如果有人可以帮助我解决我应该研究的命令,我将不胜感激。我想不出应该用什么命令,所以我希望有人能指出正确的方向!

1 个答案:

答案 0 :(得分:0)

一种近似方法是在重命名列后使用dplyr::union()函数:

colnames(df1) = df1[2,]
colnames(df1)[1] = "Date"

colnames(df2) = df2[1,]

dplyr::union(df1,df2)

#        Date         AA         BB         CC         BB
#1 2015-02-02         99         74         54         74
#2 2016-04-08         99         75         54         75
#3 2016-12-31         98         77         55         77
#4 2017-05-03        101         80         54         80
#5 2018-01-01        102         78         53         78
#6 2018-12-31        100         85         55         85
#7       Date         AA         BB         CC         BB
#8 Company ID         AA         BB         CC         BB
#9 Event date 2018-01-01 2017-05-03 2016-04-08 2017-05-03

您终于可以删除重复的行