如何在R中格式化时间

时间:2019-03-26 15:57:00

标签: r

我得到了一个分别列出日期和时间的数据集。日期很好,但是将时间视为字符而不是日期/时间对象。

当前时间列看起来像“ 13:00”,“ 13:05”,“ 13:10”等。

我尝试使用as.POSIXct()更改列,但是它将列更改为所有NA。

这是我的尝试

data = data %>%
    mutate(time = as.POSIXct(time, format = "h:m"))

我希望有类似的外观,但我希望它不是时间/日期,而不是字符串。感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

chron中的times类可以表示没有日期的时间:

library(chron)
library(dplyr)

# input data
data <- data.frame(date = "2000-01-01", time = c("13:00", "13:05", "13:10"))

data %>%
  mutate(date = as.chron(as.character(date)),
         time = times(paste0(time, ":00")),
         datetime = chron(date, time))

给予:

      date     time            datetime
1 01/01/00 13:00:00 (01/01/00 13:00:00)
2 01/01/00 13:05:00 (01/01/00 13:05:00)
3 01/01/00 13:10:00 (01/01/00 13:10:00)

答案 1 :(得分:0)

如果使用as.POSIXct,则需要以其他方式提供格式:

as.POSIXct("13:05", format = "%H:%M")

但是,这将返回[1] "2019-03-26 13:05:00 CET",因为日期/时间表示为日历日期加时间到最接近的秒。

如果您只想使用时间,则可以使用data.table::asITime

data.table::as.ITime(c("13:00", "13:05", "13:10"))

这将返回:

str(data.table::as.ITime(c("13:00", "13:05", "13:10")))
'ITime' int [1:3] 13:00:00 13:05:00 13:10:00

答案 2 :(得分:0)

有关简单的非包装解决方案:

我首先要创建一个包含日期和时间的列

dateandtime <- as.character(paste(date, time, sep = ' '))

,然后使用strptime函数:

dateandtime <- strptime(dateandtime,
                        format = "%Y-%m-%d %H:%M",
                        tz = 'GMT')

只需将数据框名称放在所有变量的前面,例如:

df$dateandtime <- as.character(paste(df$date, df$time, sep = ' '))

希望有帮助!