Как сократить дату и время - PullRequest
0 голосов
/ 18 января 2019

у меня есть данные временного ряда с 3 переменными, датой времени и ценой. затем я использовал функцию as.POSIXct, чтобы объединить дату и время в 1 столбец и отформатировать его, затем я хочу сократить свои данные по примеру даты и времени с "2018-03-05 09:00:00" до "2018-03-05 14:15:00"

Я хочу вырезать данные с датой и временем, это мои реальные данные

df1
Date         time       price
2018-03-05  09:00:00    125.9
2018-03-05  09:00:00    125.9
2018-03-05  09:00:00    125.9
2018-03-05  10:00:01    125.9
2018-03-05  10:00:30    125.9
2018-03-05  11:03:00    125.9
2018-03-05  12:00:01    125.9
2018-03-05  15:00:00    125.9
2018-03-05  14:15:00    125.9
2018-03-05  17:00:01    125.9

и я использую функцию as.POSIXct, чтобы объединить время и дату и мои данные следующим образом

        Date             Price
2018-03-05  09:00:00    125.9
2018-03-05  09:00:00    125.9
2018-03-05  09:00:00    125.9
2018-03-05  10:00:01    125.9
2018-03-05  10:00:30    125.9
2018-03-05  11:03:00    125.9
2018-03-05  12:00:01    125.9
2018-03-05  15:00:00    125.9
2018-03-05  14:15:00    125.9
2018-03-05  17:00:01    125.9

где из 3 переменных, стать двумя переменными.

тогда использую

df1[df1$Date<=as.Date('2018-03-05'),];

тогда .. это не работает

и я хочу, чтобы мои результаты были такими, где сокращение по дате с "2018-03-05 09:00:00" до "2018-03-05 14:15:00"

   Date             Price
2018-03-05  09:00:00    125.9
2018-03-05  09:00:00    125.9
2018-03-05  09:00:00    125.9
2018-03-05  10:00:01    125.9
2018-03-05  10:00:30    125.9
2018-03-05  11:03:00    125.9
2018-03-05  12:00:01    125.9
2018-03-05  15:00:00    125.9
2018-03-05  14:15:00    125.9

Ответы [ 2 ]

0 голосов
/ 18 января 2019
library(tidyverse) # includes dplyr, tidyr
library(lubridate)

Unite Дата и время

Сначала tidyr::unite() может вставить два столбца.

  • col = Date: имя нового столбца
  • sep = " ": работает как в paste()

Далее lubridate::ymd_hms() меняет символ на POSIXct объект формата year-month-day-hour-minute-second.

(mydf2 <-
  mydf %>% # your data set
  unite(Date, time, col = Date, sep = " ") %>% 
  mutate(Date = ymd_hms(Date)))
#> # A tibble: 10 x 2
#>    Date                price
#>    <dttm>              <dbl>
#>  1 2018-03-05 09:00:00  126.
#>  2 2018-03-05 09:00:00  126.
#>  3 2018-03-05 09:00:00  126.
#>  4 2018-03-05 10:00:01  126.
#>  5 2018-03-05 10:00:30  126.
#>  6 2018-03-05 11:03:00  126.
#>  7 2018-03-05 12:00:01  126.
#>  8 2018-03-05 15:00:00  126.
#>  9 2018-03-05 14:15:00  126.
#> 10 2018-03-05 17:00:01  126.

Даты вырезки

Используя dplyr::filter(), вы можете легко поднастроить строки.

mydf2 %>% 
  filter(Date >= ymd_hms("2018-03-05 09:00:00"), # from 2018-03-05 09:00:00
         Date <= ymd_hms("2018-03-05 14:15:00")) # to 2018-03-05 14:15:00
#> # A tibble: 8 x 2
#>   Date                price
#>   <dttm>              <dbl>
#> 1 2018-03-05 09:00:00  126.
#> 2 2018-03-05 09:00:00  126.
#> 3 2018-03-05 09:00:00  126.
#> 4 2018-03-05 10:00:01  126.
#> 5 2018-03-05 10:00:30  126.
#> 6 2018-03-05 11:03:00  126.
#> 7 2018-03-05 12:00:01  126.
#> 8 2018-03-05 14:15:00  126.

Приложение: импорт набора данных

mydf <-
  read_table("Date         time       price
2018-03-05  09:00:00    125.9
2018-03-05  09:00:00    125.9
2018-03-05  09:00:00    125.9
2018-03-05  10:00:01    125.9
2018-03-05  10:00:30    125.9
2018-03-05  11:03:00    125.9
2018-03-05  12:00:01    125.9
2018-03-05  15:00:00    125.9
2018-03-05  14:15:00    125.9
2018-03-05  17:00:01    125.9")
#------------------------------
mydf
#> # A tibble: 10 x 3
#>    Date       time   price
#>    <date>     <time> <dbl>
#>  1 2018-03-05 09:00   126.
#>  2 2018-03-05 09:00   126.
#>  3 2018-03-05 09:00   126.
#>  4 2018-03-05 10:00   126.
#>  5 2018-03-05 10:00   126.
#>  6 2018-03-05 11:03   126.
#>  7 2018-03-05 12:00   126.
#>  8 2018-03-05 15:00   126.
#>  9 2018-03-05 14:15   126.
#> 10 2018-03-05 17:00   126.
0 голосов
/ 18 января 2019

Вы можете преобразовать свои строки с помощью as.POSIXct для сравнения даты и времени.

subset(df1,
       Date >= as.POSIXct("2018-03-05 09:00:00") & Date <= as.POSIXct("2018-03-05 14:15:00"))

Результат:

                 Date Price
1 2018-03-05 09:00:00 125.9
2 2018-03-05 09:00:00 125.9
3 2018-03-05 09:00:00 125.9
4 2018-03-05 10:00:01 125.9
5 2018-03-05 10:00:30 125.9
6 2018-03-05 11:03:00 125.9
7 2018-03-05 12:00:01 125.9
9 2018-03-05 14:15:00 125.9
...