首页 > 解决方案 > R:按小时过滤:分钟 tibble 数据框列

问题描述

我是 R 新手,我希望通过“HourMinStamp”列过滤这个 tibble,但是我似乎无法通过适当的 HH:MM 格式来获得成功(除了 0)。我希望只保留值为“15:00”的行。


> VIXData
# A tibble: 1,115,217 x 9
   ContractName TradeDate  HourMinStamp  Open  High   Low  Last NumPriceChanges Volume
   <chr>        <date>     <time>       <dbl> <dbl> <dbl> <dbl>           <dbl>  <dbl>
 1 F.US.VX      2016-02-29 17:01         2180  2180  2180  2180               1      4
 2 F.US.VX      2016-02-29 17:02         2180  2182  2180  2182               1      5
 3 F.US.VX      2016-02-29 17:03         2180  2180  2180  2180               1      2
 4 F.US.VX      2016-02-29 17:09         2180  2180  2179  2179               1     22
 5 F.US.VX      2016-02-29 17:11         2175  2175  2175  2175               1      1
 6 F.US.VX      2016-02-29 17:13         2175  2175  2175  2175               0      4
 7 F.US.VX      2016-02-29 17:21         2175  2175  2175  2175               0     10
 8 F.US.VX      2016-02-29 17:22         2175  2175  2175  2175               0      2
 9 F.US.VX      2016-02-29 17:23         2178  2178  2177  2177               2      4
10 F.US.VX      2016-02-29 17:29         2175  2175  2175  2175               1      1
# ... with 1,115,207 more rows

我可以毫无问题地成功选择“HourMinStamp”列:

> select(VIXData, HourMinStamp)
# A tibble: 1,115,217 x 1
   HourMinStamp
   <time>      
 1 17:01       
 2 17:02       
 3 17:03       
 4 17:09       
 5 17:11       
 6 17:13       
 7 17:21       
 8 17:22       
 9 17:23       
10 17:29       
# ... with 1,115,207 more rows

我也可以毫无问题地过滤“00:00”:


> filter(VIXData, HourMinStamp == 0)
# A tibble: 577 x 9
   ContractName TradeDate  HourMinStamp  Open  High   Low  Last NumPriceChanges Volume
   <chr>        <date>     <time>       <dbl> <dbl> <dbl> <dbl>           <dbl>  <dbl>
 1 F.US.VX      2016-03-01 00'00"        2195  2195  2190  2190               1      5
 2 F.US.VX      2016-03-02 00'00"        1950  1950  1947  1947               1      2
 3 F.US.VX      2016-03-07 00'00"        1905  1905  1905  1905               0     14
 4 F.US.VX      2016-03-08 00'00"        1900  1900  1900  1900               1      2
 5 F.US.VX      2016-03-10 00'00"        1910  1910  1910  1910               0      1
 6 F.US.VX      2016-03-14 00'00"        1910  1910  1910  1910               1      1
 7 F.US.VX      2016-03-16 00'00"        1905  1905  1905  1905               1      2
 8 F.US.VX      2016-03-17 00'00"        1825  1825  1825  1825               0      1
 9 F.US.VX      2016-03-22 00'00"        1710  1710  1710  1710               0      9
10 F.US.VX      2016-03-23 00'00"        1700  1700  1700  1700               0      2
# ... with 567 more rows

大多数文档似乎都处理日期总是与 HH:MM 标记配对的情况,而不仅仅是使用 HH:MM 标记本身。任何指导将不胜感激。

标签: rdatedatetime

解决方案


用 定义时间后尝试过滤parse_time("17:01"),例如:

library(tidyverse)

df<-tibble(HourMinStamp = parse_time(c("17:01", "17:02", "17:03")))

# A tibble: 3 x 1
  HourMinStamp
  <time>      
1 17:01       
2 17:02       
3 17:03

filter(df, HourMinStamp==parse_time("17:01"))

注意,parse_time()是从tidyverse readr包里。


推荐阅读