【问题标题】:How to convert time to decimal如何将时间转换为十进制
【发布时间】:2014-03-13 22:18:14
【问题描述】:

我有一个包含 hh:mm:ss 格式的时间的大型数据集,我想将它们转换为十进制格式,同时忽略小时 (hh)。我使用了 strptime 但这似乎并没有转换它。

更准确地说,我想将00:01:38 更改为1,6333 并将01:18:30 更改为78,5

我如何在 R 中做到这一点?

【问题讨论】:

  • 你的第二个例子没有忽略小时数。
  • 马修你是对的,我没有正确解释,我的意思是函数忽略小时但计算分钟和秒。因此,01:00:00 被计为 60 分钟。

标签: r time


【解决方案1】:

这可能有一个 lubridate 函数,但我会这样做:

x <-  "01:18:30"

y <- (as.numeric(as.POSIXct(paste("2014-01-01", x))) - 
   as.numeric(as.POSIXct("2014-01-01 0:0:0")))/60
#[1] 78.5

忽略时间:

y%%60
#[1] 18.5

【讨论】:

  • 润滑方式为hour(x) * 60 + minute(x) + second(x) / 60,假设x是一个日期时间对象,而不是字符串。
  • 罗兰,我喜欢你的回答。这就是我一直在寻找的东西,我已经尝试使用 POSIXct 来实现它,但无法让它工作。非常感谢!它为我节省了很多时间!
【解决方案2】:

您可以使用stringsplitsapply

dat<-c('00:01:38','01:18:30')
sapply(strsplit(dat,":"),
       function(x) {
         x <- as.numeric(x)
         x[1]*60+x[2]+x[3]/60
       }
)

结果:

[1]  1.633333 78.500000

致谢@Joris Meys

只是扩展了他的例子: How to convert time (mm:ss) to decimal form in R

【讨论】:

  • 亲爱的 FlooO,这是我尝试的方法,但不知何故我无法让它工作。这可能与保存我的值的类有关...我选择了 Roland 提供的答案,即使您的答案也可能有用!
  • 嘿@Rentrop,我使用了您创建的函数,但是如果我想将值存储在列表中,我该怎么做?前提是我尝试将值存储在
  • 试试lapply而不是sapply
【解决方案3】:

编写一个为您进行转换的函数相对简单。假设您的输入是字符向量:

> decimateTime=function(time) {
+     time=as.numeric(unlist(strsplit(time, ":")))
+     time = time[1]*60+time[2]+time[3]/60
+     return(time)
+ }
> times=c('00:01:38', '01:18:30', '13:18:01')
> print(sapply(times,decimateTime))
00:01:38   01:18:30   13:18:01 
1.633333  78.500000 798.016667 

【讨论】:

    猜你喜欢
    • 2016-05-09
    • 1970-01-01
    • 2015-03-12
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 2013-10-08
    相关资源
    最近更新 更多