如何减少日期和时间

时间:2019-01-18 06:02:56

标签: r time posixct

我有时间序列数据,其中包含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个变量在哪里,变成2个变量。

然后使用

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 :(得分:0)

您可以使用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

答案 1 :(得分:0)

library(tidyverse) # includes dplyr, tidyr
library(lubridate)

统一日期和时间

首先,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.