我有一个函数,它接受一个日期并将其转换为矩阵中的偏移量。每15分钟的时间段内矩阵中有一行。我相信你可以更优雅或更有效地写这个,但这似乎有效,至少在大多数时候。我的问题是当我传入一个包含16个或更多日期的数组进行转换时;结果很遥远。数组15看起来很好。我尝试使其工作的事情:将偏移视为双(否),注释掉一些功能线(有时它工作,有时不工作),在函数(nope)中打印出值。显然这里有一些事情发生,但我没有尝试。是否与lubridate有关?我以前用过类似的方法没问题。代码如下,希望你可以重现这个;即使不是,请提出建议!
library(lubridate)
test15 <- structure(c(1407992400, 1407994200, 1407995100, 1407996000,
1407996900, 1407998700, 1407999600, 1408001400, 1408002300, 1408004100,
1408005000, 1408006800, 1408011300, 1408012200, 1408013100),
class = c("POSIXct", "POSIXt"), tzone = "Etc/GMT+5")
test16 <- structure(c(1407992400, 1407994200, 1407995100, 1407996000,
1407996900, 1407998700, 1407999600, 1408001400, 1408002300, 1408004100,
1408005000, 1408006800, 1408011300, 1408012200, 1408013100, 1407987000),
class = c("POSIXct", "POSIXt"), tzone = "Etc/GMT+5")
#---------------------------------------------------------------------------
# function to translate timestamp into time step offset
#---------------------------------------------------------------------------
study.start <- as.Date("2014-08-13")
interval <- 15
getoffset <- function(bin.in)
{ #get offset function
date.offset <- as.numeric(difftime(as.Date(as.POSIXlt(bin.in)),study.start))
hour.offset <- hour(bin.in)*(60/interval)
min.offset <- minute(bin.in)/interval
step.offset <- date.offset*24*(60/interval) + hour.offset + min.offset
return(step.offset)
} #get offset function
getoffset(test15)
getoffset(test16)
答案 0 :(得分:0)
此处的主要问题是,您需要在使用unit
时指定difftime
。
getoffset <- function(bin.in,study.start,interval)
{ #get offset function
date.offset <- as.numeric(difftime(as.Date(as.POSIXlt(bin.in)),study.start,units = "days"))
hour.offset <- hour(bin.in)*(60/interval)
min.offset <- minute(bin.in)/interval
step.offset <- date.offset*24*(60/interval) + hour.offset + min.offset
return(step.offset)
}
getoffset(test16,study.start=as.Date(as.POSIXlt("2014-08-13 00:00:00 GMT+5")),15)
[1] 96 98 99 100 101 103 104 106 107 109 110 112 117 118 119 90