Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中更改日期时间格式_R - Fatal编程技术网

在R中更改日期时间格式

在R中更改日期时间格式,r,R,我有一个表,有两列“开始”和“结束”,分别包含开始和结束期间的日期和时间,如下所示: 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          22May2001:00:00:00    27May2001:23:59:59
2          28May2001:00:00:00    26Jun2001:23:59:59
我想将上述日期时间转换为以下格式(带时间戳的ISO8601):

我使用了此链接中提供的代码:

这是不可取的。有人能建议我通过上述或其他方法将日期时间转换为所需格式吗?

希望这能有所帮助

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)

my_table为了清楚起见,您需要一个datetime类,在R中表示POSIXct或POSIXlt。通常我们使用
as.POSIXct
strtime
分别将字符串解析到每个类中(
as.POSIXlt
存在,但很少使用),尽管如果您愿意,可以使用lubridate替代方法

最基本的,

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
或者在dplyr中(它更喜欢POSIXct而不是POSIXlt):

两者返回的内容完全相同。您还可以使用:

库(lubridate)

my_table$Start您需要一个datetime类(即POSIXct或POSIXlt)。您可以使用
as.POSIXct
strtime
进行解析,例如
库(dplyr);df%>%mutate_at(-1,as.POSIXct,格式='%d%b%Y:%H:%M:%S')
或同等版本。请注意,在午夜打印时,两者都会忽略时间部分,但它仍然被存储。as.Date仅转换日期,而不转换时间。Try:my_table$startD@Dave2e:当我尝试使用“as.POSIXct()”时。我遇到一个错误:as.POSIXlt.character(as.character(x),…)中的错误:字符串不是标准的明确格式,。无论如何感谢您的帮助。您需要指定参数名称:
format=“%d%b%Y:%H:%M:%S”
,因为否则它会假定解析字符串是第二个参数,用于设置时区。将日期时间保留为POSIX*t比使用
格式转换回字符更有用。
StartD       StartT
2001-05-22   2001-05-22
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)
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
my_table[-1] <- lapply(my_table[,-1], as.POSIXct, format = '%d%b%Y:%H:%M:%S')
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)
my_table <- structure(list(Sr.No. = 1:2, Start = structure(1:2, .Label = c("22May2001:00:00:00", 
    "28May2001:00:00:00"), class = "factor"), End = structure(c(2L, 
    1L), .Label = c("26Jun2001:23:59:59", "27May2001:23:59:59"), class = "factor")), .Names = c("Sr.No.", 
    "Start", "End"), class = "data.frame", row.names = c(NA, -2L))