R:如何将不同长度的数字转换为日期时间

时间:2016-11-03 15:21:46

标签: r datetime

我想将数字值“212259”传输到日期时间格式。 这些数字指定一天的小时,分​​钟和秒。 我已经使用了parse_date_time((x),orders =“HMS”))或者来自lubridate包:strptime(x = x,format =“%H%M%S”),但我的问题是这些列也可以如果是在当天早些时候包含值“1158”。因此,例如,小时数没有特征。它也可能只是几秒钟,例如(12)为12日的第二天。 有人知道你我能处理吗?我想将这些值与特定日期的列组合,并对其进行一些算术运算。

祝你好运

2 个答案:

答案 0 :(得分:1)

你需要这样的东西吗?

toTime <- function(value) {
  padded_value = str_pad(value, 6, pad = "0")

  strptime(padded_value, "%H%M%S")
}

str_pad来自stringr

答案 1 :(得分:0)

因此,假设数字只是前导零的切割,我建议你转换为字符,然后重新添加它们。您可以使用函数来执行此操作,类似于:

convert_numeric <- function(x){
  if (nchar(x) == 6) {
    x <- as.character(x)
    return(x)
  } else if (nchar(x) == 4) {
    x <- as.character(paste0("00",x))
    return(x)
  } else if (nchar(x) == 2) {
    x <- as.character(paste0("0000",x))
    return(x)
  }
}

让我们说你的时代向量有你在其中提到的例子:

times <- c(212259, 1158, 12)

然后,您可以使用sapply获取正确的格式,以使用您提及的日期时间转换功能:

char_times <- sapply(times, convert_numeric)
# [1] "212259" "001158" "000012"

strptime(char_times, format = "%H%M%S")
# [1] "2016-11-03 21:22:59 CET" "2016-11-03 00:11:58 CET" "2016-11-03 00:00:12 CET"