我有两个数据框用于事件研究,并且在准备数据进行分析时有些费力。 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。如果有人可以帮助我解决我应该研究的命令,我将不胜感激。我想不出应该用什么命令,所以我希望有人能指出正确的方向!
答案 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
您终于可以删除重复的行