【问题标题】:convert hours into seconds in R在R中将小时转换为秒
【发布时间】:2014-10-06 01:41:04
【问题描述】:

我有小时格式的数据,需要将所有内容转换为秒。谁能帮帮我?

2:00:00 3:00:00 6:00:00 4:00:00 4:00:00 3:00:48 1:00:00 3:00:00 2:00:00 4:00:00 1:30:00 2:00:00 1:00:00 3:00:00 4:00:00 4:30:00 5:00:00

【问题讨论】:

  • 我知道。但我需要在 R 中的一堆数据中一直这样做
  • 如果有人对如何做有其他想法,请在那里发帖

标签: r


【解决方案1】:
# Read the data in
x <- unlist(strsplit("2:00:00 3:00:00 6:00:00 4:00:00 4:00:00 3:00:48 1:00:00 3:00:00 2:00:00 4:00:00 1:30:00 2:00:00 1:00:00 3:00:00 4:00:00 4:30:00 5:00:00", "[[:space:]]+"))
x
# [1] "2:00:00" "3:00:00" "6:00:00" "4:00:00" "4:00:00" "3:00:48" "1:00:00"
# [8] "3:00:00" "2:00:00" "4:00:00" "1:30:00" "2:00:00" "1:00:00" "3:00:00"
#[15] "4:00:00" "4:30:00" "5:00:00"

拆分: 上的每个字符串。将第一个数字乘以 3600,第二个数字乘以 60,最后一个数字乘以 1。然后将它们相加。这可以通过矩阵乘法一步完成。

sapply(strsplit(x, ":"), function(n) as.numeric(n) %*% c(3600, 60, 1))
# [1]  7200 10800 21600 14400 14400 10848  3600 10800  7200 14400  5400  7200
#[13]  3600 10800 14400 16200 18000

或者,您可以将时间转换为正确的 POSIXct 对象并从中减去午夜以获得秒数

as.numeric(strptime(x, format="%H:%M:%S") - as.POSIXct(format(Sys.Date())), units="secs")
# [1]  7200 10800 21600 14400 14400 10848  3600 10800  7200 14400  5400  7200
#[13]  3600 10800 14400 16200 18000

【讨论】:

    【解决方案2】:

    qdapTools 库具有执行此操作的 hms2sec 函数:

    x <- unlist(strsplit("2:00:00 3:00:00 6:00:00 4:00:00 4:00:00 3:00:48 1:00:00 3:00:00 2:00:00 4:00:00 1:30:00 2:00:00 1:00:00 3:00:00 4:00:00 4:30:00 5:00:00", "[[:space:]]+"))
    x
    
    library(qdapTools)
    hms2sec(x)
    
    ##  [1]  7200 10800 21600 14400 14400 10848  3600 10800  7200
    ## [10] 14400  5400  7200  3600 10800 14400 16200 18000
    

    【讨论】:

      猜你喜欢
      • 2023-02-23
      • 2021-10-29
      • 1970-01-01
      • 2016-06-01
      • 1970-01-01
      • 2018-11-16
      • 2012-06-15
      • 2015-06-02
      相关资源
      最近更新 更多