【问题标题】:One hour increment in R, zooR,动物园中的一小时增量
【发布时间】:2010-08-31 13:59:40
【问题描述】:

如何为动物园系列的索引的所有元素添加一小时?

我试过了

newseries <- myzooseries 
index(newseries) <- index(myzooseries)+times("1:00:00") 

但我收到了消息

Incompatible methods   ("Ops.dates", "Ops.times") for "+" 

谢谢

我的索引是一个带有日期和时间的 chron 对象,但我尝试了更简单的示例,但我无法得到它

【问题讨论】:

  • 接受一些答案。它会给你声誉。
  • 不仅给你声誉,而且向其他人指出哪些答案对你有帮助。

标签: r time increment zoo


【解决方案1】:

这很容易通过以数字方式添加您想要的时间来解决:

newseries <- myzooseries 
index(newseries) <- index(myzooseries) + 1/24

chron 对象表示为十进制数字,因此您可以使用它来计算。一天是 1,所以一小时是 1/24,一分钟是 1/1440,依此类推。如果您使用函数时间,您可以很容易地看到这一点。这为您提供了测试对象的时间,例如:

> A <- chron(c("01/01/97","01/02/97","01/03/97"))

> B <- A + 1/24

> B
[1] (01/01/97 01:00:00) (01/02/97 01:00:00) (01/03/97 01:00:00)

> times(A)
Time in days:
[1] 9862 9863 9864

> times(B)
Time in days:
[1] 9862.042 9863.042 9864.042


> times(B-A)
[1] 01:00:00 01:00:00 01:00:00

> times(A[3]-B[1])
Time in days:
[1] 1.958333

【讨论】:

  • 嗨。这就是我正在做的,但我害怕在使用分数时引入浮动错误。谢谢
  • 浮动错误可能会影响一秒钟,所以我不会太担心。
  • 也可以使用这种等效形式:x + as.numeric(times("01:00:00"))
【解决方案2】:

转换为POSIXct,加上60*60(1h in s)然后再转换回来。

【讨论】:

  • 没有必要转换任何东西。
  • @mbq :lol :-) 实际上,chron 有一些我在 POSIX* 中想念的非常方便的功能,比如 is.weekend()。
  • as.POSIXlt(x)$wday&gt;5?一般来说,我观察到的是,由于 R 中存在这种可怕的日期时间混乱(而且不仅如此),每个人都只有她/他自己喜欢的类型并与之合作。我喜欢 Unix 时间,因为基础数据定义明确;它显着减少了信息丢失(我的意思是“它是 CET 还是 UTC?也许我们应该把它扔掉?”)。
  • @Joris chron 也“方便地”不处理时区或夏令时。 ;-)
  • @mbq 和@Joshua:非常正确。我使用什么取决于我必须做什么。 chron 还有一个很好的“特性”,它返回函数years()、months() 等的因子。有时你想要,有时你不想要。颜色和味道,我猜...... ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
  • 2012-02-27
  • 2014-04-21
  • 2012-06-26
  • 2012-03-30
相关资源
最近更新 更多