我有一个包含两列的表格" 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
哪个不可取。有人可以建议我通过上面或任何替代方法转换所需格式的日期时间吗?
答案 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。通常我们使用$stateParams
和as.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)