gpt4 book ai didi

r - 从 POSIXct 中提取小时和秒,以便在 R 中进行绘图

转载 作者:行者123 更新时间:2023-12-03 05:44:29 24 4
gpt4 key购买 nike

假设我有以下data.frame foo

           start.time duration
1 2012-02-06 15:47:00 1
2 2012-02-06 15:02:00 2
3 2012-02-22 10:08:00 3
4 2012-02-22 09:32:00 4
5 2012-03-21 13:47:00 5

并且class(foo$start.time)返回

[1] "POSIXct" "POSIXt" 

我想创建一个 foo$durationfoo$start.time 的绘图。在我的场景中,我只对一天中的时间感兴趣,而不是一年中的实际日期。如何从向量的 POSIXct 类中以小时:秒的形式提取一天中的时间?

最佳答案

这是一个很好的问题,强调了在 R 中处理日期的一些困难。lubridate 包非常方便,所以下面我提出两种方法,一种使用 base(如 @RJ- 建议),另一种使用 base(如 @RJ- 建议)使用润滑脂。

重新创建原始帖子中的数据框(前两行):

foo <- data.frame(start.time = c("2012-02-06 15:47:00", 
"2012-02-06 15:02:00",
"2012-02-22 10:08:00"),
duration = c(1,2,3))

转换为 POSIXct 和 POSIXt 类(两种方法)

# using base::strptime
t.str <- strptime(foo$start.time, "%Y-%m-%d %H:%M:%S")

# using lubridate::ymd_hms
library(lubridate)
t.lub <- ymd_hms(foo$start.time)

现在,提取时间为十进制小时

# using base::format
h.str <- as.numeric(format(t.str, "%H")) +
as.numeric(format(t.str, "%M"))/60

# using lubridate::hour and lubridate::minute
h.lub <- hour(t.lub) + minute(t.lub)/60

证明这些方法是相同的:

identical(h.str, h.lub)

然后选择上述方法之一将小数小时分配给 foo$hr:

foo$hr <- h.str

# If you prefer, the choice can be made at random:
foo$hr <- if(runif(1) > 0.5){ h.str } else { h.lub }

然后使用 ggplot2 包进行绘图:

library(ggplot2)
qplot(foo$hr, foo$duration) + 
         scale_x_datetime(labels = "%S:00")

关于r - 从 POSIXct 中提取小时和秒,以便在 R 中进行绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10705328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com