Трудность во внутреннем соединении двух таблиц в R с некоторыми мутациями - PullRequest
0 голосов
/ 28 января 2020

Я изо всех сил пытаюсь объединить две таблицы в R:

  1. Первая таблица называется lsr_df и имеет форму, как показано ниже. Он состоит из пары акций и определенных c дат в дополнение к другим столбцам.

    dput(head(lsr_df,10))
    

    структура (список (stock1 = c ("FR", "FR", "FR", "FR", "FR", "FR", "FR", "FR", "FR", "FR"), stock2 = c ("PLD", "LMP.L", "WKP.L" , «OLP», «GOOD», «RES.JO», «UKCM.L», «GRT.JO», «ROI C», «O5RU.SI»), startofyear = структура (c (14610) , 14610, 14610, 14610, 14610, 14610, 14610, 14610, 14610, 14610), класс = "Дата"), lb20mean = c (- +0,0693048515541775, -0,0781003327926435, +0,0270008111538754, -0,029754549133328, -0,12510116675199, -0,0871014558625667, +16,8576182871088, -0,0845322274926097, -0,113270435178336, -0,0373054503504677), lb20stdev = c (0,194245073984498, 0,238650622720019, 0,241026669919644, 0,252345490511642, +0,20920635975478, 0,258911498912729, +5,49626511810755, 0,260155498292147, 0,211708554064302, 0,312881208877686)), row.names = c (Н.А., -10L), класс = c ("tbl_df", "tbl", "data.frame"))

  2. Вторая таблица называется liquidity_df. Он состоит из каждого профиля ликвидности акций на определенные c даты.

    структура dput (head (liquidity_df, 10)) (list (ticker = c ("0004.HK", "0004.HK) "," 0004.HK "," 0004.HK "," 0004.HK "," 0004.HK "," 0004.HK "," 0004.HK "," 0004.HK "," 0004.HK ") , year = структура (c (11688, 12053, 12418, 12784, 13149, 13514, 13879, 15706, 16071, 16436), class = "Date"), isLiquid = c (0, 0, 0, 0 , 0, 0, 0, 1, 1, 1)), row.names = c (NA, -10L), groups = структура (list (ticker = "0004.HK", .rows = list (1: 10)), row.names = c (NA, -1L), класс = c ("tbl_df", "tbl", "data.frame"), .drop = TRUE), класс = c ("grouped_df", "tbl_df", "tbl", "data.frame"))

  3. Я хотел бы создать новую таблицу, которая будет результатом внутреннего соединения lsr_df с дополнительным столбцом, взятым из таблицы liquidity_df. Этот новый столбец называется ликвидным и указывает профиль ликвидности каждой пары акций в lsr_df. Обратите внимание, что в таблице lsr_df есть пара акций, а в таблице ликвидности - по одной акции на строку. Поэтому код должен искать каждую строку пар акций в lsr_df, получать значение isLiquid для каждой акции в паре за каждую дату (в таблице liquidity_df) и проверять, соответствует ли она условию == 1 для обеих акций, и возвращать 1 , иначе верните 0 во вновь созданной жидкости столбца таблицы lsrf_df.

Я попробовал код ниже:

lsrf_df <- lsr_df %>%
  na.omit() %>%
  inner_join(liquidity_df, by = c('stock1' = 'ticker')) %>%
  inner_join(liquidity_df, by = c('stock2' = 'ticker')) %>%                                
  mutate(liquid = case_when(isLiquid.x == 1 & isLiquid.y == 1 ~ 
  as.integer(1), TRUE ~ as.integer(0)))
```
The code above creates new and different date columns (see below) instead of using the lsr_df dates. The result I would like is to just add the new liquid column with the correct value (condition) for each original pair and date.



    stock1 stock2 startofyear lb20mean lb20stdev year.x     isLiquid.x 
    year.y     isLiquid.y liquid   <chr>  <chr>  <date>         <dbl>     
    <dbl> <date>          <dbl> <date>          <dbl>  <int> 1 FR     
    PLD  2010-01-01   -0.0693     0.194 2000-01-01          0 2000-01-01        
    0      0 2 FR     PLD    2010-01-01   -0.0693     0.194 2000-01-01     
    0 2001-01-01          0      0 3 FR     PLD    2010-01-01   -0.0693   
    0.194 2000-01-01          0 2002-01-01          0      0 4 FR     
    PLD    2010-01-01   -0.0693     0.194 2000-01-01          0 2003-01- 
    01        0      0 5 FR     PLD    2010-01-01   -0.0693     0.194 
    2000-01-01     0 2004-01-01          0      0 6 FR     PLD    2010- 
    01-01   -0.0693   
    0.194 2000-01-01          0 2005-01-01          0      0



Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...