2015-03-31 251 views
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:00 - 25:59:00

所以我想要的是切断data$Time,所以如果它超过24:00:00它会在日期中添加另一天并显示正确的时间。

例如: "2014-01-31 25:30:00"将变得"2014-02-01 01:30:00"

回答

1

使用hms从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

谢谢!有用! 欣赏它 – KhalidN 2015-03-31 13:53:29

0

如果范围从2:00变为25:59,则意味着存在来自范围00:002小时差 - 23:59 ..那你为什么不从你的约会中取回两个小时?例如,“2014-01-31 25:30:00”将成为“2014-01-31 23:30:00”,不是吗?

如果这是你想要什么,我想这应该工作:

my.lt < - as.POSIXlt( “2014年3月9日14:00:00”)

我。 LT $小时< - my.lt $小时 - 2

+0

不完全是,我的问题是,你不能只是减去2小时内从时间,但应该改天添加到日期,这样的例子应该这样做: “2014-01- 31 25:30:00“将成为”2014-02-01 01:30:00“ – KhalidN 2015-03-31 12:11:00

+0

那么也许你可以使用my.lt $ mday? – celineu 2015-03-31 12:18:42

+0

我完全不理解? 我有超过500.000行,所以它不是我可以手动执行的。 所以我认为可以创建一个LOGIT向量来说明时间是否超过24:00:00小时,然后会说TRUE或FALSE。 然后使用该LOGIT向量在其为TRUE时添加另一天。 你能帮我吗? – KhalidN 2015-03-31 12:22:54