如何为不同的变量合并具有不同事件日期的数据集?

How to merge dataset with different eventdates for different variables?

我需要你的帮助来处理我的面板数据集。我有两个数据集,一个是关于股票数据(股票代码、日期、时间和收盘价),另一个数据集包含事件日期(事件日期、事件时间和股票代码)。我的问题是我对不同的符号有不同的事件日期,我不太确定如何在 R 中合并这两个数据集。

我试过这个:

Companies_Events <- merge (Companies, Eventdates, by = c("Symbol", "date") , all = FALSE)

而且我也尝试只为事件添加一列,但它也不起作用,并且为我返回 0 个事件值..

Companies$Events <- ifelse(Companies$date == Eventdates$date & Companies$time == Eventdates$time & Companies$Symbol == Eventdates$Symbol, 1, 0)

两者都不起作用,它们都只为我的数据集返回 0 个值。你知道我在代码中做错了什么吗?

我的数据集看起来像这样,但目标是将数据集合并在一起。

   Symbol   Date    time        Close
A   12.03.2020  06:00   65,542503
A   12.03.2020  07:00   72,334999
A   12.03.2020  08:00   63,857498
A   12.03.2020  09:00   65,057499
A   12.03.2020  10:00   67,4925
A   12.03.2020  11:00   66,552502
A   12.03.2020  12:00   65,215
A   12.03.2020  13:00   66,6675
A   12.03.2020  14:00   62,195
A   12.03.2020  15:00   52,310001
A   12.03.2020  16:00   51,092499
A   14.03.2020  06:00   66,542503
A   14.03.2020  07:00   71,334999
A   14.03.2020  08:00   68,857498
A   14.03.2020  09:00   62,057499
A   14.03.2020  10:00   69,4925
A   14.03.2020  11:00   60,552502
A   14.03.2020  12:00   63,215
A   14.03.2020  13:00   61,6675
A   14.03.2020  14:00   61,195
A   14.03.2020  15:00   57,310001
A   14.03.2020  16:00   56,092499
B   12.03.2020  08:00   186,960007
B   12.03.2020  09:00   184,360001
B   12.03.2020  10:00   171,130005
B   12.03.2020  11:00   182,600006
B   12.03.2020  12:00   172,949997
B   12.03.2020  13:00   160,080002
B   12.03.2020  14:00   175,830002
B   12.03.2020  15:00   152,009995
B   12.03.2020  16:00   157,889999
B   12.03.2020  17:00   148,479996
B   12.03.2020  18:00   152,25
B   12.03.2020  19:00   146,830002
B   15.03.2020  08:00   134,960007
B   15.03.2020  09:00   135,360001
B   15.03.2020  10:00   140,130005
B   15.03.2020  11:00   145,600006
B   15.03.2020  12:00   147,949997
B   15.03.2020  13:00   138,080002
B   15.03.2020  14:00   137,830002
B   15.03.2020  15:00   136,009995
B   15.03.2020  16:00   138,889999
B   15.03.2020  17:00   132,479996
B   15.03.2020  18:00   130,25
B   15.03.2020  19:00   12,830002

还有这个:

Symbol      Event   Event1    Event1_date   Event1_time
A   12.03.2020  NA    NA    
A   12.03.2020  NA    NA    
A   12.03.2020  NA    NA    
A   12.03.2020  NA    NA    
A   12.03.2020  1     12/03/2020    10:00
A   12.03.2020  NA    NA    
A   12.03.2020  NA    NA    
A   12.03.2020  NA    NA    
A   12.03.2020  NA    NA    
A   12.03.2020  NA    NA    
A   12.03.2020  NA    NA    
A   14.03.2020  NA    NA    
A   14.03.2020  NA    NA    
A   14.03.2020  NA    NA    
A   14.03.2020  NA    NA    
A   14.03.2020  NA    NA    
A   14.03.2020  1     14/03/2020    11:00
A   14.03.2020  NA    NA    
A   14.03.2020  NA    NA    
A   14.03.2020  NA    NA    
A   14.03.2020  NA    NA    
A   14.03.2020  NA    NA    
B   12.03.2020  NA    NA    
B   12.03.2020  NA    NA    
B   12.03.2020  NA    NA    
B   12.03.2020  NA    NA    
B   12.03.2020  NA    NA    
B   12.03.2020  1     12/03/2020    13:00
B   12.03.2020  NA    NA    
B   12.03.2020  NA    NA    
B   12.03.2020  NA    NA    
B   12.03.2020  NA    NA    
B   12.03.2020  NA    NA    
B   12.03.2020  NA    NA    
B   15.03.2020  NA    NA    
B   15.03.2020  NA    NA    
B   15.03.2020  NA    NA    
B   15.03.2020  NA    NA    
B   15.03.2020  1     12/03/2020    12:00
B   15.03.2020  NA    NA    
B   15.03.2020  NA    NA    
B   15.03.2020  NA    NA    
B   15.03.2020  NA    NA    
B   15.03.2020  NA    NA    
B   15.03.2020  NA    NA    
B   15.03.2020  NA    NA    
    

你能帮我正确合并数据集吗?

非常感谢!

我认为在你的情况下你可以做一个 cbind:

cbind(df1, df2[,2:5])

或者如果你想 joinmerge 你必须在每个 df 中放置一个 unqiue 标识符。

df1 <- df %>% 
    select(Symbol, Date, time, Close) %>% 
    mutate(Date = dmy(Date)) %>% 
    mutate(id = row_number())

df2 <- df %>% 
    select(1, 5:8) %>% 
    mutate(across(c(Event, Event1_date), dmy)) %>% 
    mutate(id = row_number())
   
left_join(df1, df2)

输出:

`cbind(df1, df2[,2:5])
   Symbol       Date     time     Close      Event Event1 Event1_date Event1_time
1       A 2020-03-12 06:00:00  65542503 2020-03-12     NA        <NA>          NA
2       A 2020-03-12 07:00:00  72334999 2020-03-12     NA        <NA>          NA
3       A 2020-03-12 08:00:00  63857498 2020-03-12     NA        <NA>          NA
4       A 2020-03-12 09:00:00  65057499 2020-03-12     NA        <NA>          NA
5       A 2020-03-12 10:00:00    674925 2020-03-12      1  2020-03-12    10:00:00
6       A 2020-03-12 11:00:00  66552502 2020-03-12     NA        <NA>          NA
7       A 2020-03-12 12:00:00     65215 2020-03-12     NA        <NA>          NA
8       A 2020-03-12 13:00:00    666675 2020-03-12     NA        <NA>          NA
9       A 2020-03-12 14:00:00     62195 2020-03-12     NA        <NA>          NA
10      A 2020-03-12 15:00:00  52310001 2020-03-12     NA        <NA>          NA
11      A 2020-03-12 16:00:00  51092499 2020-03-12     NA        <NA>          NA
12      A 2020-03-14 06:00:00  66542503 2020-03-14     NA        <NA>          NA
13      A 2020-03-14 07:00:00  71334999 2020-03-14     NA        <NA>          NA
14      A 2020-03-14 08:00:00  68857498 2020-03-14     NA        <NA>          NA
15      A 2020-03-14 09:00:00  62057499 2020-03-14     NA        <NA>          NA
16      A 2020-03-14 10:00:00    694925 2020-03-14     NA        <NA>          NA
17      A 2020-03-14 11:00:00  60552502 2020-03-14      1  2020-03-14    11:00:00
18      A 2020-03-14 12:00:00     63215 2020-03-14     NA        <NA>          NA
19      A 2020-03-14 13:00:00    616675 2020-03-14     NA        <NA>          NA
20      A 2020-03-14 14:00:00     61195 2020-03-14     NA        <NA>          NA
21      A 2020-03-14 15:00:00  57310001 2020-03-14     NA        <NA>          NA
22      A 2020-03-14 16:00:00  56092499 2020-03-14     NA        <NA>          NA
23      B 2020-03-12 08:00:00 186960007 2020-03-12     NA        <NA>          NA
24      B 2020-03-12 09:00:00 184360001 2020-03-12     NA        <NA>          NA
25      B 2020-03-12 10:00:00 171130005 2020-03-12     NA        <NA>          NA
26      B 2020-03-12 11:00:00 182600006 2020-03-12     NA        <NA>          NA
27      B 2020-03-12 12:00:00 172949997 2020-03-12     NA        <NA>          NA
28      B 2020-03-12 13:00:00 160080002 2020-03-12      1  2020-03-12    13:00:00
29      B 2020-03-12 14:00:00 175830002 2020-03-12     NA        <NA>          NA
30      B 2020-03-12 15:00:00 152009995 2020-03-12     NA        <NA>          NA
31      B 2020-03-12 16:00:00 157889999 2020-03-12     NA        <NA>          NA
32      B 2020-03-12 17:00:00 148479996 2020-03-12     NA        <NA>          NA
33      B 2020-03-12 18:00:00     15225 2020-03-12     NA        <NA>          NA
34      B 2020-03-12 19:00:00 146830002 2020-03-12     NA        <NA>          NA
35      B 2020-03-15 08:00:00 134960007 2020-03-15     NA        <NA>          NA
36      B 2020-03-15 09:00:00 135360001 2020-03-15     NA        <NA>          NA
37      B 2020-03-15 10:00:00 140130005 2020-03-15     NA        <NA>          NA
38      B 2020-03-15 11:00:00 145600006 2020-03-15     NA        <NA>          NA
39      B 2020-03-15 12:00:00 147949997 2020-03-15      1  2020-03-12    12:00:00
40      B 2020-03-15 13:00:00 138080002 2020-03-15     NA        <NA>          NA
41      B 2020-03-15 14:00:00 137830002 2020-03-15     NA        <NA>          NA
42      B 2020-03-15 15:00:00 136009995 2020-03-15     NA        <NA>          NA
43      B 2020-03-15 16:00:00 138889999 2020-03-15     NA        <NA>          NA
44      B 2020-03-15 17:00:00 132479996 2020-03-15     NA        <NA>          NA
45      B 2020-03-15 18:00:00     13025 2020-03-15     NA        <NA>          NA
46      B 2020-03-15 19:00:00  12830002 2020-03-15     NA        <NA>          NA