我有一个包含两列“start”和“end”的表,其中包含相应开始和结束时段的日期和时间,如下所示:
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 回答
为了清楚起见,在答案形式中,您需要一个datetime类,在R中表示POSIXct或POSIXlt . 通常我们使用
as.POSIXct
和strptime
分别将字符串解析到每个类中(as.POSIXlt
存在,但很少使用),尽管如果你愿意,还有一些替代品 .最基本的,
请注意,您需要指定
format
字符串的名称,因为as.POSIXct
的第二个参数实际上是tz
(用于设置时区) . 另请注意,虽然Start
看起来像是's missing a time, that',因为POSIX * t的打印方法不会在午夜打印时间,但它们仍然存储 .如果您想在一行中更改两者,则可以使用
或者在dplyr中(比POSIXlt更喜欢POSIXct):
两者都返回完全相同的东西 . 你也可以使用lubridate::dmy_hms, which parses to POSIXct:
这也回归同样的事情 .
数据
希望这可以帮助 .