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 数据库支持的系统配置。)
我正在尝试准备这些日期和时间以供分析。时间很棘手,因为它是立陶宛的军事时间(比美国早 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 数据库支持的系统配置。)