【问题标题】:How to parse date and time with milliseconds, spread across multiple columns?如何以毫秒解析日期和时间,分布在多列?
【发布时间】:2016-05-17 06:08:10
【问题描述】:

我在格式化日期和时间时遇到了毫秒问题。

说明: csv 中的日期格式分别作为日期、时间和毫秒分布在前 3 列 2014/12/22,14:48:51,800 中。 所以,我基本上将它们合并为 1。在这里,为了说明,我取了数据框的 1 行

temp
#[1] "2014/12/22" "14:48:51"   "800" 

temp <- gsub("/","-",paste(temp[1],paste(temp[2],temp[3],sep="."),sep=" "))
#[1] "2014-12-22 14:48:51.800" 

然后,设置选项

op <- options(digits.secs = 3)
options(op)
Date_time <- as.POSIXlt(strptime(temp, format="%Y-%m-%d %H:%M:%OS"))
#[1] "2014-12-22 14:48:51.8 IST"

上面的输出会给我 "2014-12-22 15:10:41.8 IST" 。 但是,对于 8 毫秒和 80 毫秒,它也会给出相同的输出“2014-12-22 15:10:41.8 IST”

另外,如果我使用 format="%Y-%m-%d %H:%M:%OS3" 我会得到 NA。

【问题讨论】:

  • 感谢 Akrun 的及时回复!。使用 sprintf 80 毫秒,我得到 "2014-12-22 14:48:51.008 IST" 和 800 "2014-12-22 14:48:51.08 IST" 。我想我们需要更多的修改。回复第一条评论:80 毫秒 csv 中的 3 列是“2014/12/22,14:48:51,080”
  • 预期输出:需要 Posix 时间,理想情况下是“2014-12-22 14:48:51.008”8 毫秒“2014-12-22 14:48:51.080”80 和“ 2014-12-22 14:48:51.800" 为 800
  • 我发表了我的评论作为解决方案。它给出了你展示的内容。

标签: r posixct posixlt


【解决方案1】:

我们可以使用sprintf 将列粘贴在一起,因为使用sprintf 更容易修改“毫秒”列的格式。然后,使用strptime 转换为日期时间类。

op <- options(digits.secs = 3)
strptime(sprintf("%s %s.%03d", temp[,1], temp[,2], 
          temp[,3]), format = '%Y/%m/%d %H:%M:%OS')
#[1] "2014-12-22 14:48:51.800 IST" "2014-12-22 14:48:51.008 IST" 
#[3] "2014-12-22 14:48:51.080 IST"

数据

temp <- structure(list(date = c("2014/12/22", "2014/12/22",
    "2014/12/22"), time = c("14:48:51", "14:48:51", "14:48:51"),
   millisec = c(800L, 8L, 80L)), .Names = c("date", 
  "time", "millisec"), class = "data.frame", row.names = c(NA, -3L))

【讨论】:

  • 正在尝试 Akrun 提供的解决方案,但仍然失败。代码如下: temp
  • @rahulkmishra 您只使用了一个单行元素。您是否尝试过使用我展示的示例数据?
  • @rahulkmishra 当只有你展示的元素时,它只打印.8。但是,这是个大问题吗?如果需要打印,可以使用format,即format(strptime(temp, format = '%Y/%m/%d %H:%M:%OS'), '%Y-%m-%d %H:%M:%OS3') #[1] "2014-12-22 14:48:51.800"
  • 我现在尝试了你的例子,它就像一个魅力。但是任何想法我哪里会出错。它真的取决于数据结构吗?即使对于单行,逻辑也不应该工作吗?我什至在 data.frame 上进行了尝试,但它最后仍然吃掉了零。有什么怀疑吗?
  • 酷。我知道了 !!谢谢!对于打印,我现在使用格式
猜你喜欢
  • 2021-09-27
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多