【问题标题】:Convert Integers to Time and Make Calculations in R将整数转换为时间并在 R 中进行计算
【发布时间】:2015-12-19 11:18:52
【问题描述】:

我在日期时间问题上遇到了困难。我的数据框看起来像这样,我想找出每个人看电视的时长。

Start.Time <- c(193221,201231,152324,182243,123432,192245)
End.Time <- c(202013,211232,154521,183422,133121,201513)
cbind(Start.Time,End.Time)

我尝试了不同的方法来转换它们以便能够进行计算,但我没有产生任何显着的结果。

as.POSIXct(Start.Time , origin="2015-11-01")

我的结果完全错误

[1] "2015-11-03 05:40:21 GMT" "2015-11-03 07:53:51 GMT"
[3] "2015-11-02 18:18:44 GMT" "2015-11-03 02:37:23 GMT"
[5] "2015-11-02 10:17:12 GMT" "2015-11-03 05:24:05 GMT"

例如我希望 193221 变成 19:32:21 HH:MM:SS

是否有可以轻松进行转换的软件包?如果可能的话,我不希望显示日期,只显示时间。

【问题讨论】:

  • 包 lubridate 可能会帮助你

标签: r date time integer datetime-conversion


【解决方案1】:

您可以将数字转换为实际时间戳(POSIXct 格式),如下所示:

Start.Time <- c(193221,201231,152324,182243,123432,192245)
Start.POSIX <- as.POSIXct(as.character(Start.Time), format = "%H%M%S")
Start.POSIX
## [1] "2015-12-19 19:32:21 CET" "2015-12-19 20:12:31 CET" "2015-12-19 15:23:24 CET"
## [4] "2015-12-19 18:22:43 CET" "2015-12-19 12:34:32 CET" "2015-12-19 19:22:45 CET"

如您所见,as.POSIXct 假定时间属于当前日期。 POSIXct 总是表示一个特定的时刻,因此不仅包含时间,还包含日期。您现在可以使用这些轻松进行计算:

End.Time <- c(202013,211232,154521,183422,133121,201513)
End.POSIX <- as.POSIXct(as.character(End.Time), format = "%H%M%S")
End.POSIX - Start.POSIX
## Time differences in mins
## [1] 47.86667 60.01667 21.95000 11.65000 56.81667 52.46667

当您打印 POSIXct 对象时(就像我在上面对 Start.POSIX 所做的那样),它们会被准确地转换为字符并打印出来。您可以看到这一点,因为日期周围有"。您可以控制打印时使用的格式,因此您只能按如下方式打印时间:

format(Start.POSIX, "%H:%M:%S")
## [1] "19:32:21" "20:12:31" "15:23:24" "18:22:43" "12:34:32" "19:22:45"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 2014-07-09
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 2022-12-16
    • 1970-01-01
    相关资源
    最近更新 更多