【问题标题】:Convert from Numeric to Time in seconds以秒为单位从数字转换为时间
【发布时间】:2020-06-24 14:38:22
【问题描述】:

我有一份完成调查所需的持续时间列表。目前为数字形式。

    duration
    275
    207
    197
    251
    651
    278
    20
    343

class(survey$duration) 给出“数字”

我希望 R 将这些读取为秒。我不需要任何日期或任何东西,输出与原始输出相同,但 R 将其识别为时间,而不是数字。

我试过了 survey$duration<-as.POSIXct(strptime(survey$duration, tz = "GMT", format = "%S")) 但结果也给出了日期。

非常感谢!

【问题讨论】:

  • 只是为了让我们可以为您提供更多帮助,您需要 R 知道列持续时间为秒的原因是什么?你的最终目标是什么?
  • 同意@JForsythe..这听起来有点像XY问题..
  • 对不起!我是 R 的新手。我正在清理我的数据,我只是认为人们进行调查所花费的时间应该被解读为时间,而不是数字。没有具体原因!只是试图整理数据。也许我不需要这样做!
  • 尽我们所能帮助您没问题。这将归结为个人喜好。对我来说,我会将列留在数字类中,并确保在其余代码或分析中将该列视为秒。它使您的代码保持简单,并且不依赖于外部包。您可以使用我从 Lubridate 包中提供的代码将其转换为持续时间类,但除非您有特殊理由这样做,否则它不会提供更多功能(尽管如果这是您的最终目标,它可能有助于转换)。

标签: r time


【解决方案1】:

lubridate 库可以将时间存储为持续时间、间隔或周期。这可能是您正在寻找的:

duration_Vec<-sample(1:1000,10)

library(lubridate)
as.duration(duration_Vec)

【讨论】:

    【解决方案2】:

    您可以在period 中转换数值,参见lubridate package

    lubridate::seconds_to_period(survey$duration)
    
    lubridate::seconds_to_period(275)
    [1] "4M 35S"
    
    lubridate::seconds_to_period(275)+lubridate::seconds_to_period(300)
    [1] "9M 35S"
    

    【讨论】:

      【解决方案3】:

      你可以data.tableas.ITime()

      duration <- c(275,207,197,251,651,278,20,343)
      library( data.table )
      data.table::as.ITime( duration )
      
      # [1] "00:04:35" "00:03:27" "00:03:17" "00:04:11" "00:10:51" "00:04:38" "00:00:20" "00:05:43"
      

      如果你的值 > 24 * 60 * 60,你会遇到问题

      【讨论】:

        猜你喜欢
        • 2018-08-17
        • 2015-06-17
        • 1970-01-01
        • 2018-03-07
        • 2018-11-29
        • 1970-01-01
        • 1970-01-01
        • 2014-10-16
        • 2020-10-24
        相关资源
        最近更新 更多