【问题标题】:Colon in date format between seconds and milliseconds. How to parse in R?日期格式的冒号,介于秒和毫秒之间。如何在 R 中解析?
【发布时间】:2012-11-16 19:27:28
【问题描述】:

如何解析这种日期格式?我应该将此冒号更改为点还是有人知道更好的解决方案?

> x <- "2012.01.15 09:00:02:002"
> strptime(x, "%Y.%m.%d %H:%M:%S:%OS") 
[1] "2012-01-15 09:00:02"
> strptime(x, "%Y.%m.%d %H:%M:%OS")
[1] "2012-01-15 09:00:02"
> x <- "2012.01.15 09:00:02.002"
> strptime(x, "%Y.%m.%d %H:%M:%OS")
[1] "2012-01-15 09:00:02.001"

【问题讨论】:

  • 两个答案都是正确的+1!但我个人更喜欢 gsubfn :D
  • 你真的知道最后一个冒号后面的数字是小数秒吗?它可能是其他东西,比如框架。

标签: r datetime time-series milliseconds strptime


【解决方案1】:

这里有一个微妙的区别,可能会让你大吃一惊。 正如?strptime 所说:

对于 'strptime' '%OS' 将输入秒,包括小数秒。

为了强调一点,%OS 代表秒包括小数秒 --- 不仅仅是秒的小数部分:如果秒值为 44.234 , %OS%OS3 代表 44.234,而不是 .234

所以解决方案确实是用. 替换最后的:

你可以这样做:

x <- "2012.01.15 09:00:02:002"
strptime(gsub(":", ".", x), "%Y.%m.%d %H.%M.%OS") 

【讨论】:

  • +1。我认为 OP 已经知道所有这些——你会注意到他在他尝试的最后一件事中使用了这个事实——但这可能对可能遇到这个问题的其他人有用。
  • @ruakh -- 好点,我怀疑你是对的。我喜欢?strptime 的引用使这一点更加明确。
  • 是的,我确实将冒号转换为点。谢谢快速回复:)
【解决方案2】:

strptime(gsub(":", ".", x), "%Y.%m.%d %H.%M.%OS3")

作弊?

【讨论】:

  • sub 只会将: 的第一个实例替换为.,而不是每个实例。根据@JoshO'Brien 的回答,您需要gsub
  • @Justin:我想在您发表评论时我实际上已经解决了这个问题,但谢谢。 :-)
猜你喜欢
  • 1970-01-01
  • 2021-09-27
  • 2015-09-16
  • 2019-08-01
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
  • 2019-10-21
相关资源
最近更新 更多