首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tips需要有时差函数或在R中使用约简。

Tips需要有时差函数或在R中使用约简。
EN

Stack Overflow用户
提问于 2015-02-05 14:03:05
回答 1查看 551关注 0票数 1

我需要编写一个函数来计算每次后续时间戳和第一次时间戳之间的时间差。在数据集中,大约有80,000个时间戳。我编写了以下函数:

代码语言:javascript
复制
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()函数,并编写了如下所示:

代码语言:javascript
复制
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)

首先,它并没有做我想做的事情,因为理论上它会得到后续时间戳之间的区别,而不仅仅是第一个时间戳。我想这也可以解决--只是还不确定有多好。但是,更重要的是,我得到了以下错误:

代码语言:javascript
复制
Error in as.POSIXct.numeric(time1) : 'origin' must be supplied

当我提供origin时,我会得到以下错误:

代码语言:javascript
复制
Error in difftime(b, a, units = "hours", origin = "1970-01-01") : 
  unused argument (origin = "1970-01-01") 

有什么建议吗?也许使用Reduce或者改进我自己函数的优雅。

-干杯,tstev

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-05 14:26:02

利用矢量化的优势:

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28345951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档