R:将时间戳转换为(尽可能短的)整数
R: Turn timestamps into (as short as possible) integers
编辑 1:我认为一个可能的解决方案是计算自开始日期以来经过的 15 分钟间隔的数量。如果有人对此有想法,请站出来。谢谢
正如标题所说,我正在寻找一种将时间戳转换为尽可能小的整数的方法。
情况说明:
我正在使用“panelAR”。我有 T>N panel-data 包含不同的时间戳,看起来像这样(总共 300,000 行):
df$timestamp[1]
[1] "2013-08-01 00:15:00 UTC"
class(df$timestamp)
[1] "POSIXct" "POSIXt"
我正在使用 panelAR,因此需要时间戳作为整数。我不能简单地使用“as.integer”,因为我会达到整数的最大长度,导致只有 NA。这是我第一次尝试解决这个问题:
df$timestamp <- as.numeric(gsub("[: -]", "" , df$timestamp, perl=TRUE))
Subtract the numbers starting at te 3rd position (Because "20" is irrelevant) and stop before the 2nd last position (Because they all end at 00 seconds)
(I need shorter integers in order to not hit the max level of integers in R)
df$timestamp <- substr(df$timestamp, 3, nchar(df$timestamp)-2)
#Save as integer
df$timestamp <- as.integer(df$timestamp)
#Result
df$timestamp[1]
1308010015
这允许 panelAR 使用它,但数字似乎太大了。当我尝试使用它 运行 进行回归时,我收到以下错误消息:
“无法分配大小为 1052.2 GB 的矢量”
我正在寻找一种方法将这些时间戳转换为(尽可能小的)整数,以便与 panelAR 一起使用。
非常感谢任何帮助。
您得到的这个大数字对应于自 1970 年 1 月 1 日以来经过的秒数 00:00:00。你的时间戳有规律的间隔吗?如果是,比方说,您可以每 15 分钟将所有整数除以 900,这可能会有所帮助。
另一种选择是选择您最早的日期并将其从其他日期中减去
#generate some dates:
a <- as.POSIXct("2013-01-01 00:00:00 UTC")
b <- as.POSIXct("2013-08-01 00:15:00 UTC")
series <- seq(a,b, by = 'min')
#calculate the difference (result are integers/seconds)
integer <- as.numeric(series - min(series))
如果您仍然遇到内存问题,我可能会将两者结合起来。
我设法解决了主要问题。由于这仍然会导致内存错误,我认为这源于观察次数和 panelAR 计算事物的方式。我将为此单独开一个问题。
我用过
df$timestampnew <- as.integer(difftime(df$timestamp, "2013-01-01 00:00:00", units = "min")/15)
获取计算自某个日期以来经过的 15 分钟间隔数的整数。
编辑 1:我认为一个可能的解决方案是计算自开始日期以来经过的 15 分钟间隔的数量。如果有人对此有想法,请站出来。谢谢
正如标题所说,我正在寻找一种将时间戳转换为尽可能小的整数的方法。
情况说明:
我正在使用“panelAR”。我有 T>N panel-data 包含不同的时间戳,看起来像这样(总共 300,000 行):
df$timestamp[1]
[1] "2013-08-01 00:15:00 UTC"
class(df$timestamp)
[1] "POSIXct" "POSIXt"
我正在使用 panelAR,因此需要时间戳作为整数。我不能简单地使用“as.integer”,因为我会达到整数的最大长度,导致只有 NA。这是我第一次尝试解决这个问题:
df$timestamp <- as.numeric(gsub("[: -]", "" , df$timestamp, perl=TRUE))
Subtract the numbers starting at te 3rd position (Because "20" is irrelevant) and stop before the 2nd last position (Because they all end at 00 seconds)
(I need shorter integers in order to not hit the max level of integers in R)
df$timestamp <- substr(df$timestamp, 3, nchar(df$timestamp)-2)
#Save as integer
df$timestamp <- as.integer(df$timestamp)
#Result
df$timestamp[1]
1308010015
这允许 panelAR 使用它,但数字似乎太大了。当我尝试使用它 运行 进行回归时,我收到以下错误消息: “无法分配大小为 1052.2 GB 的矢量”
我正在寻找一种方法将这些时间戳转换为(尽可能小的)整数,以便与 panelAR 一起使用。
非常感谢任何帮助。
您得到的这个大数字对应于自 1970 年 1 月 1 日以来经过的秒数 00:00:00。你的时间戳有规律的间隔吗?如果是,比方说,您可以每 15 分钟将所有整数除以 900,这可能会有所帮助。
另一种选择是选择您最早的日期并将其从其他日期中减去
#generate some dates:
a <- as.POSIXct("2013-01-01 00:00:00 UTC")
b <- as.POSIXct("2013-08-01 00:15:00 UTC")
series <- seq(a,b, by = 'min')
#calculate the difference (result are integers/seconds)
integer <- as.numeric(series - min(series))
如果您仍然遇到内存问题,我可能会将两者结合起来。
我设法解决了主要问题。由于这仍然会导致内存错误,我认为这源于观察次数和 panelAR 计算事物的方式。我将为此单独开一个问题。
我用过
df$timestampnew <- as.integer(difftime(df$timestamp, "2013-01-01 00:00:00", units = "min")/15)
获取计算自某个日期以来经过的 15 分钟间隔数的整数。