R 中的日期和时间操作

Date and time manipulation in R

我正在尝试准备这些日期和时间以供分析。时间很棘手,因为它是立陶宛的军事时间(比美国早 10 小时)。我的问题是如何将时间转换为正确的美国时间?另外,如何将列拆分为分隔日期和时间的两列?

这是我的示例数据:

a <- c("10/4/2016 21:11","10/11/2016 19:53" ,"9/16/2016 0:39",
   "8/17/2016 21:46","11/16/2016 9:37","11/29/2016 16:14",
   "10/7/2016 20:14","9/16/2016 0:27","9/27/2016 23:10",
   "2/24/2015 20:37","11/8/2016 21:05","5/25/2016 1:30",
   "8/5/2016 0:41","8/22/2016 23:02","5/25/2016 0:43",
   "9/28/2016 22:17","9/14/2016 22:58","8/25/2016 18:10","10/10/2016 16:55" ,"10/7/2016 0:11")

df <- data.frame(Date=a, stringsAsFactors = F)

我要:

>df
     Date       Time
1  2016-10-04  9:11 PM
2  2016-10-11  6:53 PM
3  2016-09-16  1:39 AM
4  2016-08-17  9:46 PM

了解格式化日期时间值的地方是 ?strptime。大多数 htat 知识都适用于 as.Date 和 format.Date 以及 format.POSIXt 函数。时间的显示需要先正确输入,再输出:

df2 <- data.frame(Date=as.Date(df$Date, format="%m/%d/%Y"),
                 Time=format( as.POSIXct( df$Date, format="%m/%d/%Y %H:%M"), 
                              format="%I:%M %p") )
> df2
         Date     Time
1  2016-10-04 09:11 PM
2  2016-10-11 07:53 PM
3  2016-09-16 12:39 AM
4  2016-08-17 09:46 PM
5  2016-11-16 09:37 AM
snipped output

每个 "%_" 项目都在 ?strptime 帮助页面的单独条目中进行了描述。您可以在需要使模式匹配过程正确发生的地方添加文字,如“?”、“:”和空格。如果您的格式更不规则,lubridate-包还有一些额外的功能。还有 chron-package 允许分隔时间和日期,但现在似乎用得不多了。

这显示了如何读取立陶宛军事时间并输出为 New_York 时间:

df2 <- data.frame(Date=as.Date(df$Date, format="%m/%d/%Y"), 
                  Time=format( as.POSIXct( df$Date, format="%m/%d/%Y %H:%M", 
                                           usetz=TRUE, tz="Etc/GMT-2"), # input
                              "%I:%M %p", tz="EST5EDT") ) # output

也可以在输入阶段使用tz="Europe/Vilnius"。固定偏移量不适应 DST 更改,而 "Europe/Vilnius" 选择会(取决于 Olson 数据库支持的系统配置。)