将日期和时间转换为日期+时间戳

3

我有一个数据集,包含两列,日期和时间,我想将其转换为一个包含日期和时间的列,例如:"2014-02-01 13:04:05"

我知道实现此操作的代码是:

as.POSIXct(paste(data$Date, data$Time),format="%Y-%m-%d %H:%M:%S")

这将返回许多正确的值,但由于数据集存在问题,也会返回NA。我的问题出在处理data$Time时将其视为因子,时间范围从02:00:0025:59:00
所以我想要做的是截断data$Time,如果超过24:00:00,则将另一天添加到日期并显示正确的时间。
例如:"2014-01-31 25:30:00"将变成"2014-02-01 01:30:00"
2个回答

1
使用lubridate中的:
library(lubridate)
x <- "2014-01-31 25:30:00" # input

as.Date(x) + hms(sub(".* ", "", x))

提供:

[1] "2014-02-01 01:30:00 UTC"

0
如果时间范围从2:00到25:59,这意味着与范围00:00 - 23:59相比有2小时的差异...那么为什么不从您的日期中减去两个小时呢?例如,“2014-01-31 25:30:00”将变为“2014-01-31 23:30:00”,是吗?
如果这就是你想要的,我想这应该可以解决:
my.lt <- as.POSIXlt("2014-03-09 14:00:00") my.lt$hour <- my.lt$hour - 2

不完全是这样,我的问题是不能仅仅从时间中减去2小时,而应该在日期上再加一天,所以示例应该这样做: "2014-01-31 25:30:00" 将变成 "2014-02-01 01:30:00"。 - KhalidN
那么也许你可以使用我的.lt$mday? - celineu
我不完全理解? 我的代码有超过500,000行,所以这不是我可以手动完成的事情。 因此,我想创建一个LOGIT向量,如果时间超过24:00:00小时,则会说出TRUE或FALSE。 然后使用该LOGIT向量在其为TRUE时添加另一天。 你能帮我吗? - KhalidN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接