【问题标题】:Parse time and convert to minutes解析时间并转换为分钟
【发布时间】:2020-10-29 17:31:24
【问题描述】:

数据看起来像这样。

data$arrival_time: int  1245 1345 1805 1950 710 755 2115 2215 615 730 ...
data$real_time   : int  1256 1423 1859 2105 712 1009 2139 2344 542 946 ...

例如,1245 表示 12:45,1345 表示 13:45。

我只想将 12:45 转换为 765 和 13:45 转换为 825,因此可以将 format(hour:minutes) 转换为分钟。 (参见 1260+450=765 和 1360+45=825)

如何将时间转换为分钟?

【问题讨论】:

    标签: r time


    【解决方案1】:

    模算术是您的朋友。两个有用的 R 运算符:

    • %/% 进行整数除法,例如5 %/% 2 是 2,38 %/% 3 是 12
    • %% 是模数/余数运算符,例如5 %% 2 是 1,38 %% 3 是 2

    对于m<n 的正整数,我们总是有n = m*(n %/% m) + n %% m

    我们可以通过识别您输入的“小时”部分由x %/% 100 给出,而“分钟”由x %% 100 给出,从而帮助您,因此您的答案是:

    60 * (x %/% 100) + ( x %% 100 )
    #    ^ hours   ^   ^ minutes  ^
    

    【讨论】:

    • 感谢您的建议。我可以再问你一个问题吗?
    • 我的意思是...我想将日期转换为周。例如,日期数据看起来像 20130101,我只想将此数据转换为 1。(参见日期 -> 53 的星期)
    • @hyejuryu 这完全是一个不同的问题,您可以尝试询问。在这种情况下,您最好将其解析为日期(请参阅?as.Datestrptime),然后使用一些格式选项(请参阅?format.POSIXlt)将其转换为星期。看起来你想要 ISO 周——像 data.tablelubridate 这样的一些包已经内置了函数来帮助它。
    【解决方案2】:

    您可以使用floor%%

    v <- c(1245, 1345, 1805, 1950, 710, 755, 2115, 2215, 615, 730, 000)
    
    floor(v/100)*60 + v %% 100
    # [1]  765  825 1085 1190  430  475 1275 1335  375  450    0
    

    【讨论】:

      【解决方案3】:

      您可以尝试一种数学方法,即

      x <- c(1245, 1345, 710, 2115, 542, 946)
      
      (floor(x / 100) * 60) + (x - round(x, -2))
      #[1]  765  825  430 1275  342  586
      

      【讨论】:

        猜你喜欢
        • 2017-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-25
        • 1970-01-01
        相关资源
        最近更新 更多