Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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 POSIXct对象_R_Lubridate - Fatal编程技术网

从字符串中提取时间戳并转换为R POSIXct对象

从字符串中提取时间戳并转换为R POSIXct对象,r,lubridate,R,Lubridate,目前,我的数据集具有以下格式的时间变量因子: weekday month day hour min seconds +0000 year 我不知道+0000区域是什么,但所有观测都有这个。例如: "Tues Feb 02 11:05:21 +0000 2018" "Mon Jun 12 06:21:50 +0000 2017" "Wed Aug 01 11:24:08 +0000 2018" 我想将这些值转换为POSIXlt或POSIXct对象EAR MOUNT day hour:min:

目前,我的数据集具有以下格式的时间变量因子:

weekday month day hour min seconds +0000 year
我不知道+0000区域是什么,但所有观测都有这个。例如:

"Tues Feb 02 11:05:21 +0000 2018" 
"Mon Jun 12 06:21:50 +0000 2017"
"Wed Aug 01 11:24:08 +0000 2018"
我想将这些值转换为POSIXlt或POSIXct对象EAR MOUNT day hour:min:sec,并使它们成为数字。当前,使用as.numericas.charactertime-variable会输出不正确的值


谢谢你的回复!我真的很感激。

不确定如何重现从factor到char的转换,但从这一点开始,这段代码应该可以工作:

t <- unlist(strsplit(as.character("Tues Feb 02 11:05:21 +0000 2018")," "))
strptime(paste(t[6],t[2],t[3], t[4]),format='%Y %b %d %H:%M:%S')

PS:有关日期格式和转换的更多信息:

对于此问题,您可以不用使用lubridate。首先,要提取单个日期,我们可以使用regmatches和gregexpr:

这是期望的输出。可以找到格式,也可以使用lubridate::guess_格式。如果您不指定tz,您将获得系统时区的输出,例如,对于我来说,这将是EST。因为偏移量是在格式中指定的,所以R正确地执行转换

要获取数值,请执行以下操作:

> as.numeric(as.POSIXct(date_vec, format = '%a %b %d %H:%M:%S %z %Y', tz = 'UTC'))
[1] 1517569521 1497248510
注:这是基于统一的字符串结构。在OP中有周二而不是周二,这是行不通的。上述示例基于标准报告格式的三字母缩写

但是,如果您的数据是不同格式的混合,那么您必须提取单独的时间字符串自定义正则表达式,然后使用lubridate::guess_格式获取格式,然后使用这些格式执行转换

希望这是有帮助的

> as.POSIXct(date_vec, format = '%a %b %d %H:%M:%S %z %Y', tz = 'UTC')
[1] "2018-02-02 11:05:21 UTC" "2017-06-12 06:21:50 UTC"
> as.numeric(as.POSIXct(date_vec, format = '%a %b %d %H:%M:%S %z %Y', tz = 'UTC'))
[1] 1517569521 1497248510