Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.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
在缺少某些时间时使用strtime格式化时间,并将AM/PM转换为24小时格式_R_Datetime_Format_Converter - Fatal编程技术网

在缺少某些时间时使用strtime格式化时间,并将AM/PM转换为24小时格式

在缺少某些时间时使用strtime格式化时间,并将AM/PM转换为24小时格式,r,datetime,format,converter,R,Datetime,Format,Converter,我有一个时间戳向量,比如 time_stamp <- c("7/1/2013", "7/1/2013 12:00:30 AM", "7/1/2013 12:01:00 AM", "7/1/2013 12:01:30 AM", "8/1/2013","8/1/2013 11:02:30 PM") 但由于两个时间戳缺少时间,因此会导致NAs,默认情况下应替换为:12:00:00 我可以运行循环,例如: for (i in 1:length(time_stamp)) { if(nchar

我有一个时间戳向量,比如

time_stamp <- c("7/1/2013", "7/1/2013 12:00:30 AM", "7/1/2013 12:01:00 AM", "7/1/2013 12:01:30 AM", "8/1/2013","8/1/2013 11:02:30 PM")
但由于两个时间戳缺少时间,因此会导致
NA
s,默认情况下应替换为:12:00:00

我可以运行循环,例如:

for (i in 1:length(time_stamp))
{
   if(nchar(time_stamp[i])<11)
   {
       time_stamp[i] <- paste(time_stamp[i], " 12:00:00 AM")
    }
}

time_stamp <- format(strptime(time_stamp, format = "%d/%m/%Y %I:%M:%S %p", tz = "GMT"), "%d/%m/%Y %H:%M:%S", tz = "GMT")
for(i/1:长度(时间戳))
{

如果(nchar(时间戳[i])
lubridate::parse_date\u time
可以接受多个令牌订单,无论是否带有
%

lubridate::parse_date_time(time_stamp, orders = c("dmy IMS p", "dmy"))
## [1] "2013-01-07 00:00:00 UTC" "2013-01-07 00:00:30 UTC" "2013-01-07 00:01:00 UTC"
## [4] "2013-01-07 00:01:30 UTC" "2013-01-08 00:00:00 UTC" "2013-01-08 23:02:30 UTC"
或者使用其
截断的
参数:

lubridate::parse_date_time(time_stamp, orders = 'dmy IMS p', truncated = 4)

返回相同的内容。

lubridate::parse_date_time
可以接受多个令牌订单,无论是否使用
%

lubridate::parse_date_time(time_stamp, orders = c("dmy IMS p", "dmy"))
## [1] "2013-01-07 00:00:00 UTC" "2013-01-07 00:00:30 UTC" "2013-01-07 00:01:00 UTC"
## [4] "2013-01-07 00:01:30 UTC" "2013-01-08 00:00:00 UTC" "2013-01-08 23:02:30 UTC"
或者使用其
截断的
参数:

lubridate::parse_date_time(time_stamp, orders = 'dmy IMS p', truncated = 4)

返回相同的内容。

或使用一点正则表达式替换,然后按正常方式处理:

as.POSIXct(sub("(\\d{4}$)", "\\1 00:00:00", time_stamp),
           format = "%d/%m/%Y %H:%M:%S", tz = "GMT")
#[1] "2013-01-07 00:00:00 GMT" "2013-01-07 12:00:30 GMT" "2013-01-07 12:01:00 GMT"
#[4] "2013-01-07 12:01:30 GMT" "2013-01-08 00:00:00 GMT" "2013-01-08 11:02:30 GMT"

或者使用一点正则表达式替换,然后按正常方式处理:

as.POSIXct(sub("(\\d{4}$)", "\\1 00:00:00", time_stamp),
           format = "%d/%m/%Y %H:%M:%S", tz = "GMT")
#[1] "2013-01-07 00:00:00 GMT" "2013-01-07 12:00:30 GMT" "2013-01-07 12:01:00 GMT"
#[4] "2013-01-07 12:01:30 GMT" "2013-01-08 00:00:00 GMT" "2013-01-08 11:02:30 GMT"

谢谢!你能解释一下上下文中使用的正则表达式吗。@discipulus-它实际上只是替换了表示年份的最后4位数字
d{4}
在文本的末尾用4位数字
\\1
加上
00:00:00
谢谢!请解释一下上下文中使用的正则表达式。@discipulus-它基本上只是替换代表年份的最后4位数字
d{4}
在文本末尾
$
用4位数字
\\1
00:00