Как извлечь цены из времени в R и суммировать значения за минуту?

#r #dataframe #datetime #timestamp #calculation

Вопрос:

У меня есть фрейм данных, с которым мне немного сложно справиться:

 Date      Time         Price   Amount
19990104  14:11:14.34  220     100
19990104  14:11:21.21  200     150
19990104  14:11:36.35  221     200
19990104  14:11:45.45  202     150
19990104  14:11:56.11  215     100
 

Я пытаюсь создать полное время: "%Y-%m-%d %H:%M:%S" e.g. 1999-01-04 14:11:14 для первого ряда.

После этого я хотел бы найти НАЧАЛЬНУЮ цену минуты, то есть первую цену за эту минуту, КОНЕЧНУЮ цену и самую высокую и самую низкую цену… Кроме того, вы видите Amount и эти значения за МИНУТУ, я хотел бы рассчитать их в сумме за эту минуту.

Очень важно, чтобы в результате секунды были равны нулю. Таким образом, результат здесь должен быть:

 Time        Start End  Low High  Amount
1999-01-04 14:11:00  220   215  200 221   700 
 

Спасибо!

Ответ №1:

Объедините Date и Time столбец, чтобы получить метку времени. Используйте floor_date для округления метки времени до уровня минуты и суммирования данных.

 library(dplyr)
library(tidyr)
library(lubridate)

df %>%
  unite(Timestamp, Date, Time, sep = ' ') %>%
  mutate(Timestamp = ymd_hms(Timestamp)) %>%
  arrange(Timestamp) %>%
  group_by(Timestamp = floor_date(Timestamp, 'mins')) %>%
  summarise(Start = first(Price), 
            End = last(Price), 
            Low = min(Price), 
            High = max(Price), 
            Amount = sum(Amount))

#  Timestamp           Start   End   Low  High Amount
#  <dttm>              <int> <int> <int> <int>  <int>
#1 1999-01-04 14:11:00   220   215   200   221    700