在R中更改日期时间格式

时间:2016-07-26 15:33:21

标签: r

我有一个包含两列的表格" start"和"结束"包含相应开始和结束时段的日期和时间,如下所示:

Sr. No.    Start                 End
1          22May2001:00:00:00    27May2001:23:59:59
2          28May2001:00:00:00    26Jun2001:23:59:59

我想按以下格式转换上述日期时间(带时间戳的ISO8601):

Sr. No.    Start                 End
1          2001-05-22 00:00:00   2001-05-27 23:59:59
2          2001-05-28 00:00:00   2001-06-26 23:59:59

我使用了此链接提供的代码:http://www.stat.berkeley.edu/~s133/dates.html

View(my_table)
str(my_table)
my_table$startD <- as.Date(my_table$start, "%d%b%Y:%H:%M:%S")
my_table$startT <- strptime(my_table$start, format = "%d%b%Y:%H:%M:%S")

到目前为止,我的尝试给了我两个这样的列:

StartD       StartT
2001-05-22   2001-05-22

哪个不可取。有人可以建议我通过上面或任何替代方法转换所需格式的日期时间吗?

2 个答案:

答案 0 :(得分:1)

希望这有帮助。

my_table <- "22May2001:22:02:50"

my_table <- strptime(as.character(my_table), "%d%b%Y:%H:%M:%S")

my_table <- format(my_table, "%Y-%m-%d %H:%M:%S")

str(my_table)

答案 1 :(得分:1)

为了清楚起见,在答案形式中,您需要一个日期时间类,在R中表示POSIXct或POSIXlt。通常我们使用$stateParamsas.POSIXct分别将字符串解析到每个类中(strptime存在,但很少使用),尽管如果您愿意,还有一些替代品。

最基本的,

as.POSIXlt

请注意,您需要指定my_table$Start <- as.POSIXct(my_table$Start, format = '%d%b%Y:%H:%M:%S') my_table$End <- as.POSIXct(my_table$End, format = '%d%b%Y:%H:%M:%S') my_table ## Sr.No. Start End ## 1 1 2001-05-22 2001-05-27 23:59:59 ## 2 2 2001-05-28 2001-06-26 23:59:59 字符串的名称,因为format的第二个参数实际上是as.POSIXct(用于设置时区)。另请注意,虽然tz似乎缺少时间,但这是因为POSIX * t的打印方法不会在午夜打印时间,但它们仍然存储。

如果您想在一行中更改两者,可以使用

Start

或在dplyr中(首选POSIXl over POSIXlt):

my_table[-1] <- lapply(my_table[,-1], as.POSIXct, format = '%d%b%Y:%H:%M:%S')

两者都返回完全相同的东西。您也可以使用lubridate::dmy_hms, which parses to POSIXct

library(dplyr)

my_table %>% mutate_at(-1, as.POSIXct, format = '%d%b%Y:%H:%M:%S')

也会返回同样的东西。

数据

library(lubridate)

my_table$Start <- dmy_hms(my_table$Start)    # or lapply like above
my_table$End <- dmy_hms(my_table$End)

# or dplyr
my_table %>% mutate_at(-1, dmy_hms)