2015-07-28 7 views
0

Образец файла, загруженного с сайта Bloomberg, выглядит следующим образом (a), (b). результирующий файл должен быть как (c). Пожалуйста, помогите с некоторым кодом R или кодом Excel или VBA. PS: если две временные метки одинаковы, тогда следует принять самую высокую цену, а затем приоритет следует отдавать размеру.Bid Спрашивать о слиянии данных на основе одной и той же отметки исторических данных о тиках, загруженной из Bloomberg

(a) TCS IN Equity  
01-04-2015 09:00:00 BID 2515 1 
01-04-2015 09:00:04 BID 2553.95 133 
01-04-2015 09:00:04 BID 2553.95 168 
01-04-2015 09:00:06 BID 2515 1 
01-04-2015 09:00:14 BID 2520 5 
01-04-2015 09:00:24 BID 2525 3 

(b)TCS IN Equity   
01-04-2015 09:00:00 ASK 2594 5 
01-04-2015 09:00:04 ASK 2565 1 
01-04-2015 09:00:05 ASK 2594 5 
01-04-2015 09:00:14 ASK 2570 10 
01-04-2015 09:05:28 ASK 2560 5 

(c) 
TCS IN Equity  BID BID_SIZ OFR OFR_SIZ 
01-04-2015 09:00:00 2515 1 2594 5 
01-04-2015 09:00:04 2553.95 168 2565 1 
01-04-2015 09:00:14 2520 5 2570 10 
+0

Можете ли вы предоставить некоторые воспроизводимые данные вместе с ожидаемым результатом _and_ процесс, который его генерирует? –

+0

Дорогой этот внутридневный тиковый файл загружается из Bloomberg в формате excel. Показанные здесь данные очень малы. Фактически точки данных очень большие от 10k до 15 k. Вы можете помочь. –

ответ

0

данных

A <- structure(list(date = structure(c(1L, 1L, 1L, 1L, 1L, 1L), 
          .Label = "01-04-2015", class = "factor"), 
        time = structure(c(1L, 2L, 2L, 3L, 4L, 5L), 
          .Label = c("09:00:00", 
             "09:00:04", "09:00:06", "09:00:14", 
             "09:00:24"), class = "factor"), 
        type = structure(c(1L, 1L, 1L, 1L, 1L, 1L), 
          .Label = "BID", class = "factor"), 
        BID = c(2515, 2553.95, 2553.95, 2515, 2520, 2525), 
        BID_SIZ = c(1L, 133L, 168L, 1L, 5L, 3L)), 
        .Names = c("date", "time", "type", "BID", "BID_SIZ"), 
        class = "data.frame", row.names = c(NA, -6L)) 
B <- structure(list(date = structure(c(1L, 1L, 1L, 1L, 1L), 
          .Label = "01-04-2015", class = "factor"), 
        time = structure(1:5, 
          .Label = c("09:00:00", "09:00:04", 
             "09:00:05", "09:00:14", "09:05:28"), 
          class = "factor"), 
        type = structure(c(1L, 1L, 1L, 1L, 1L), 
          .Label = "ASK", class = "factor"), 
        OFR = c(2594L, 2565L, 2594L, 2570L, 2560L), 
        OFR_SIZ = c(5L, 1L, 5L, 10L, 5L)), 
        .Names = c("date", "time", "type", "OFR", "OFR_SIZ"), 
        class = "data.frame", row.names = c(NA, -5L)) 

Код

library(dplyr) 
inner_join(A, B, by = c("date", "time")) %>% 
    group_by(date, time) %>% 
    arrange(BID, BID_SIZ) %>% 
    summarise_each(funs(last)) %>% 
    select(-type.x, -type.y) 
# Source: local data frame [3 x 6] 
# Groups: date 
# 
#   date  time  BID BID_SIZ OFR OFR_SIZ 
# 1 01-04-2015 09:00:00 2515.00  1 2594  5 
# 2 01-04-2015 09:00:04 2553.95  168 2565  1 
# 3 01-04-2015 09:00:14 2520.00  5 2570  10 

Объяснение

Во-первых, вы используете inner_join, чтобы объединить два набора данных. Затем вы сортируете в каждой комбинации date/time в соответствии с BID/BID_SIZ, а затем вы выбираете последнюю строку.

+0

Уважаемые, приведенные здесь данные - это всего лишь образец. На самом деле, около 15 000 пунктов назначения и запроса. Таким образом, трудно получить доступ к данным через список или структуру. –

+1

Не комментируйте. Если вы можете организовать ваши два набора данных как 'data.frame', то код, показанный выше, будет работать. Вы попробовали? Если да, то какой код ошибки, если нет, почему бы и нет? – thothal