【问题标题】:Convert numbers to time in R在R中将数字转换为时间
【发布时间】:2018-09-04 11:28:27
【问题描述】:

我想将带有数字的数据框列转换为小时(以数字表示),例如,如果值为 75,我需要将其转换为 1.15,或者如果值为 180,我需要将其转换为 3,等等在。不一定是时间格式。我知道下面的功能是用户将数字转换为时间,但我想做的是不同的。

x = c('834', '1534')    
time <- substr(as.POSIXct(sprintf("%04.0f", x), format='%H%M'), 12, 16)

一个

【问题讨论】:

  • 所以您想将分钟转换为小时,是这样吗? as.numeric(x) / 60 怎么了?
  • @AndreElrico 我假设这是一个错字。

标签: r


【解决方案1】:

将秒数(例如 75)转换为十进制格式,例如 minutes.seconds 有点奇怪,但您可以这样做:

a <- 75
hour <- floor(a / 60) # floor() rounds down to the last full hour
minute <- a %% 60 * 0.01 # the %% operator gives you the remainder in base 60
new_time <- hour + minute

1.15

【讨论】:

  • 使其成为真正的解决方案:x = c('834', '1534', '75', '180'); convert_M2H &lt;- function(x) { a &lt;- as.numeric(x); hour &lt;- floor(a / 60); minute &lt;- a %% 60 * 0.01; new_time &lt;- hour + minute; }; sapply(x,convert_M2H);
【解决方案2】:

在我看来,您只是经过了简单的几分钟到(小数)小时的转换。

请注意,“75”实际上应该是 1.25 而不是 1.15,这似乎是一个错误。如果这不是错误,请解释“75”如何变成 1.15。

x = c('834', '1534', '180', '75')

as.numeric(x) / 60
#[1] 13.90000 25.56667  3.00000  1.25000

【讨论】:

  • 嗨 Maurits,我正在寻找的是数值 75(以分钟为单位)到小时的时间转换,75 分钟是 1 小时 15 分钟,因此我需要 1.15 分钟的输出而不是1.25,@jbobres 建议的方法完成了工作.. 谢谢
  • @Vikram 这是对小数小时的非常非常规定义。 通常分数表示十进制分数,而不是六十进制分数。如果你想表示 1 小时 15 分钟,你可以写成1h15m永远不要写成1.15
【解决方案3】:

我创建了一个函数,虽然不是最好的方法,但它可以工作。

number.to.time <- function(x){  
hours <- as.numeric(x)/60  
clean.hours <- floor(hours)  
minutes.60 <- clean.hours*60  
get.extra.minutes <- as.numeric(x) - minutes.60  
result <- paste(clean.hours, get.extra.minutes, sep=".")  
return(result)  
}

结果;

>number.to.time(75)
[1] "1.15"

>number.to.time(1112)
 [1] "18.32"

 x = c(75, 190, 200, 1155)

> number.to.time(x)
[1] "1.15"  "3.10"  "3.40"  "19.15"

【讨论】:

  • 1. x的输入类型是字符串(OP),2.200 -&gt; 3.20,不是3.40,3.在函数中使用return()而不是print()
  • 嗨,JM_44,这个功能很有帮助
  • 谢谢@AndreElrico
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
  • 1970-01-01
相关资源
最近更新 更多