#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