在R中将数字时间转换为日期时间的POSIXct格式

5

我有一个数据框,其中应该包含一个已经在R中读取的日期时间列。时间值以数字时间的形式出现,如下面的数据示例所示。我想将它们转换为datetime POSIXct或POSIXlt格式,以便可以查看日期和时间。

tdat <- c(974424L, 974430L, 974436L, 974442L, 974448L, 974454L, 974460L, 974466L, 974472L,
          974478L, 974484L, 974490L, 974496L, 974502L, 974508L, 974514L, 974520L, 974526L,
          974532L,974538L)
974424应该等同于00:00:00 01/03/2011,但不知道数字值的起始时间(即下面使用的1970-01-01不起作用)。我已经尝试使用以下命令来实现这一点,并花费了时间尝试让as.POXISct起作用,但我没有找到解决方案(即我要么得到一个POSIXct对象的NAs,要么得到模糊的日期时间值)。
将数值时间转换为日期时间的尝试:
datetime <- as.POSIXct(strptime(time, format = "%d/%m/%Y %H:%M:%S"))
datetime <- as.POSIXct(as.numeric(time), origin='1970-01-01') 

我相信这是一件简单的事情。任何帮助都将不胜感激。谢谢!


1
这些时间值是以小时、分钟还是秒为单位的?如果您不知道原始时间,那么您必须了解这一点才能进行转换。 - Theodore Lytras
@ Theodore:它们应该是以小时为单位。日期时间值应该按照以下方式运行:00:00:00 01/03/2011,06:00:00 01/03/2011,12:00:00 01/03/2011,18:00:00 01/03/2011,00:00:00 02/03/2011等等(每6小时间隔)。 - jjulip
1个回答

7
尝试以下方法之一,具体取决于你想使用哪个时区:
t.gmt <- as.POSIXct(3600 * (tdat - 974424), origin = '2011-03-01', tz = "GMT") 

t.local <- as.POSIXct(format(t.gmt))

谢谢。datetime值应该从2011年1月3日00:00:00开始,以6小时为间隔运行,即2011年1月3日06:00:00、2011年1月3日12:00:00、2011年1月3日18:00:00、2011年1月4日00:00:00等。我该如何修改上面的代码来实现这一点?目前它给出的是分钟而不是小时间隔:即“2011-01-03 00:00:00 GMT”、“2011-01-03 00:00:06 GMT”、“2011-01-03 00:00:12 GMT”。谢谢! - jjulip
2
如果tdat按6小时间隔,则第一行只需将tday-974424乘以60*6来转换为分钟。 - Theodore Lytras
@jjulip,请查看修订后的答案。 - G. Grothendieck
@ 谢谢你们两位。非常感谢。使用 as.POSIXct((tdat - 974424)*3600, origin='2011-03-01', tz = "GMT") 已经成功了。 - jjulip
2
令人惊讶。我的数字值(2019年)在范围内约为43,000。这可能是什么单位? - Lazarus Thurston
1
@Lazarus,自1900年1月1日以来的天数?类似于Excel。 - Mark Neal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接