提示需要带时差函数或者在R中使用Reduce
Tips need with time difference function or using Reduce in R
我需要编写一个函数,每次计算后续时间戳与第一个时间戳之间的时间差。在数据集中大约有 80,000 个时间戳。我编写了以下函数:
timeDIFF <- function(data){
t_diff <- rep(0,length = nrow(data))
for (i in 2:nrow(data)){
t_diff[i] <- as.numeric(difftime(data["TimeStamp"][i,],
data["TimeStamp"][1,],
units="hours"))
}
return(t_diff)
}
顺便提一下提高优雅的一般技巧,欢迎!
到 运行 不需要那么长时间,但考虑到我将收到更多的观察结果,时间会显着增加。然后我遇到了 Reduce()
函数并写了这样的东西:
x <- strptime(date$TimeStamp,format="%Y-%m-%d %H:%M:%OS")
f <- function(a,b) as.numeric(difftime(b,a,units="hours"))
t_diff <- Reduce(f,x)
首先,它并不完全符合我的要求,因为理论上它会取后续时间戳之间的差异,而不仅仅是第一个时间戳。我认为这也可以解决 - 只是不确定如何解决。但是,更重要的是,我收到以下错误:
Error in as.POSIXct.numeric(time1) : 'origin' must be supplied
当我提供 origin
时,出现以下错误:
Error in difftime(b, a, units = "hours", origin = "1970-01-01") :
unused argument (origin = "1970-01-01")
有什么建议吗?也许使用 Reduce
或改进我自己的功能的优雅。
--干杯,tstev
利用矢量化:
times <- as.POSIXct("2015-02-05 12", format = "%Y-%m-%d %H", tz = "GMT") + (0:3) * 3600
#[1] "2015-02-05 12:00:00 GMT" "2015-02-05 13:00:00 GMT" "2015-02-05 14:00:00 GMT" "2015-02-05 15:00:00 GMT"
as.numeric(difftime(times[-1], times[1], units="hours"))
#[1] 1 2 3
我不确定你为什么认为你应该为此使用 Reduce
。
我需要编写一个函数,每次计算后续时间戳与第一个时间戳之间的时间差。在数据集中大约有 80,000 个时间戳。我编写了以下函数:
timeDIFF <- function(data){
t_diff <- rep(0,length = nrow(data))
for (i in 2:nrow(data)){
t_diff[i] <- as.numeric(difftime(data["TimeStamp"][i,],
data["TimeStamp"][1,],
units="hours"))
}
return(t_diff)
}
顺便提一下提高优雅的一般技巧,欢迎!
到 运行 不需要那么长时间,但考虑到我将收到更多的观察结果,时间会显着增加。然后我遇到了 Reduce()
函数并写了这样的东西:
x <- strptime(date$TimeStamp,format="%Y-%m-%d %H:%M:%OS")
f <- function(a,b) as.numeric(difftime(b,a,units="hours"))
t_diff <- Reduce(f,x)
首先,它并不完全符合我的要求,因为理论上它会取后续时间戳之间的差异,而不仅仅是第一个时间戳。我认为这也可以解决 - 只是不确定如何解决。但是,更重要的是,我收到以下错误:
Error in as.POSIXct.numeric(time1) : 'origin' must be supplied
当我提供 origin
时,出现以下错误:
Error in difftime(b, a, units = "hours", origin = "1970-01-01") :
unused argument (origin = "1970-01-01")
有什么建议吗?也许使用 Reduce
或改进我自己的功能的优雅。
--干杯,tstev
利用矢量化:
times <- as.POSIXct("2015-02-05 12", format = "%Y-%m-%d %H", tz = "GMT") + (0:3) * 3600
#[1] "2015-02-05 12:00:00 GMT" "2015-02-05 13:00:00 GMT" "2015-02-05 14:00:00 GMT" "2015-02-05 15:00:00 GMT"
as.numeric(difftime(times[-1], times[1], units="hours"))
#[1] 1 2 3
我不确定你为什么认为你应该为此使用 Reduce
。