【问题标题】:Converting date to time by hour按小时将日期转换为时间
【发布时间】:2019-11-26 12:41:21
【问题描述】:

我正在尝试将 data$TIME(格式:下午 06:07:11)转换为小时(在本例中为 18),以便我可以计算每小时的查询(调用)次数以绘制直方图或条形图。

有人可以帮帮我吗?

data = read.csv('X.csv')
data$TIME <- format(strptime(data$TIME, "%H:%M:%S %p"), format="%H:%M:%S")

但上面的代码返回的是 NAs...

【问题讨论】:

  • 嗨,欢迎来到 SO!请查看how to ask,尤其是how to make a great reproducible example。特别是需要一个数据样本,以便我们可以看到 data$TIME 的样子,以便我们帮助您进行调试。
  • 在上面的代码之后,data$TIME返回[1] NA NA NA NA NA NA
  • lubridate 包中的 hour() 函数怎么样?
  • 小时(数据$TIME)
  • @Denis hour(data$TIME) 导致 'as.POSIXlt.numeric(x, tz = tz(x)) 中的错误:必须提供'origin''

标签: r time timestamp histogram hour


【解决方案1】:

使用strptime,然后选择hour 组件。请注意,使用%p 时,小时必须用%I 表示,而不是%H

strptime("07/01/2019 06:07:11 PM", "%m/%d/%Y %I:%M:%S %p")$hour
## [1] 18

更新

发帖人在回答后更改了问题,因此修改后的问题的答案是:

strptime("06:07:11 PM", "%I:%M:%S %p")$hour
## [1] 18

【讨论】:

  • 谢谢你,但我需要使用存储在 data$TIME 中的时间。你能帮我用 data$TIME 写这个吗?我尝试做 data$TIME
  • 请注意,该问题通过示例明确指出格式包括日期而不仅仅是时间;但是,如果有时间,格式必须指定并且只是:"%I:%M:%S %p"
  • @G. Grothendieck 抱歉,我编辑了这个问题。 data$TIME 实际上只包含时间 (H:MM:SS XM) 我尝试使用 strptime(data$TIME, "%m/%d/%Y %I:%M:%S %p")$hour 并返回一大堆 NA,没有数字
  • 格式必须与数据对应。根据我的最后评论,如果数据中没有日期,则不得包含格式的日期部分。请参阅更新。
【解决方案2】:

您可以使用lubridatedplyr 来解决这个问题。您可以使用 lubridate 解析日期,然后使用 hour() 函数提取小时。然后计算该指定小时的观察次数。

library(lubridate)
library(dplyr)


# create sample date to parse
sample_date <- "07/01/2019 06:07:11 PM"

# parse date using lubridate 
# stands for day-month-year hour-minute-sconds
parsed_date <- dmy_hms(sample_date) 

# generate sample date times
sample_dates <- seq(from = parsed_date, to = parsed_date + days(10), length.out = 240)

tibble(dates = sample_dates) %>% 
  mutate(hour = hour(dates)) %>% 
  group_by(hour) %>% 
  summarise(n_hour = n())

#> # A tibble: 24 x 2
#>     hour n_hour
#>    <int>  <int>
#>  1     0     10
#>  2     1     10
#>  3     2     10
#>  4     3     10
#>  5     4     10
#>  6     5     10
#>  7     6     10
#>  8     7     10
#>  9     8     10
#> 10     9     10
#> # … with 14 more rows

reprex package (v0.2.1) 于 2019-07-17 创建

【讨论】:

  • 根据对这个问题的更改,您可以使用lubridate::hms() 而不是lubridate::mdy_hms() 解析时间,其余的仍然适用。
猜你喜欢
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多