我得到了一个分别列出日期和时间的数据集。日期很好,但是将时间视为字符而不是日期/时间对象。
当前时间列看起来像“ 13:00”,“ 13:05”,“ 13:10”等。
我尝试使用as.POSIXct()更改列,但是它将列更改为所有NA。
这是我的尝试
data = data %>%
mutate(time = as.POSIXct(time, format = "h:m"))
我希望有类似的外观,但我希望它不是时间/日期,而不是字符串。感谢您的帮助!
答案 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 = ' '))
希望有帮助!