这可能看起来像一个重复的问题,但我找不到正确的答案。我正在处理R中的一些数据,我希望将时间戳(其中一个变量)存储为自1960年1月1日起经过的秒,而不是默认在1970年1月1日的R中。我这样做是因为我的目的是合并这个使用SAS数据集的数据集也具有时间戳列和SAS中的defalt是1960年1月1日。这是我想要实现的目标 -
x <- "2017/04/11 10:32"
x <- as.POSIXct(x, format="%Y/%m/%d %H:%M", origin="1960-01-01", tz="UTC")
x <- as.numeric(x)
这给了我x = 1491906720这是错误的,因为根据SAS它应该是1807525920。我尝试向后移动,如下所示,并得到了正确的结果。
x <- 1807525920
x <- as.POSIXct(x, origin="1960-01-01", tz="UTC")
给了我x =“2014-04-11 10:32:00”这是正确的。我不确定我错在哪里。这可能是一个非常愚蠢的事情,但任何帮助将不胜感激。谢谢!
答案 0 :(得分:1)
origin
对于导入数字日期非常有用(通常由可能使用与R不同的其他程序生成)。这就解释了为什么你第二次得到预期的输出。由于您首先将字符串转换为POSIXct,origin
在那里没有做任何事情。使用difftime
获取x
与您想要的任何其他日期之间的间隔。
x = "2017/04/11 10:32"
as.numeric(difftime(time1 = as.POSIXct(x, tz = "UTC"),
time2 = as.POSIXct("1960-01-01", tz = "UTC"),
units = "secs"))
#[1] 1807525920