我想剪切日期和时间的数据, 这是我的真实数据
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
答案 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.