在r中将两列转换为日期和时间

时间:2018-06-05 06:46:10

标签: r

我知道这个问题一再被问到。但这一次,问题有点不同。

a<-matrix(c("01-02-2014", "02-02-2014", "03-02-2014", 
"04-02-2014","05-02-2014","0 1", "0 2", "0 3", "0 4","0 5"),nrow=5)

a<-data.frame(a)

names(a)<-c("date","time")

a$date<-as.Date(a$date, format="%d-%m-%Y")

所以现在我得到了这个数据框。

    date       time
1 2014-02-01   0 1
2 2014-02-02   0 2
3 2014-02-03   0 3
4 2014-02-04   0 4
5 2014-02-05   0 5

正如您所看到的,时间是一天中的分钟,但它不是典型的00:00形式,因此R不会将其识别为时间,所以我的问题是如何将时间列转换为00 :00格式,所以我可以与日期列合并形成%Y%m%d%H:%M ??

2 个答案:

答案 0 :(得分:2)

我们可以在sprintf空格(split)之后使用" "来获取所需的格式

a$time <- sapply(strsplit(as.character(a$time), " "), 
    function(x) do.call(sprintf, c(fmt = "%02d:%02d", as.list(as.numeric(x)))))
a$time
#[1] "00:01" "00:02" "00:03" "00:04" "00:05"

然后,paste列并转换为POSIXct

as.POSIXct(paste(a$date, a$time))
#[1] "2014-02-01 00:01:00 EST" "2014-02-02 00:02:00 EST"
#[3] "2014-02-03 00:03:00 EST" "2014-02-04 00:04:00 EST"
#[5] "2014-02-05 00:05:00 EST"

或者使用lubridate我们可以直接将其转换为POSIXct,而无需格式化“时间”列

library(lubridate)
ymd_hm(paste(a$date, a$time), tz = "EST")
#[1] "2014-02-01 00:01:00 EST" "2014-02-02 00:02:00 EST"
#[3] "2014-02-03 00:03:00 EST" "2014-02-04 00:04:00 EST"
#[5] "2014-02-05 00:05:00 EST"

答案 1 :(得分:1)

你不需要做任何事情。只需按原样使用它:

strptime(do.call(paste,a),"%Y-%m-%d %H %M","UTC")
[1] "2014-02-01 00:01:00 UTC" "2014-02-02 00:02:00 UTC"
[3] "2014-02-03 00:03:00 UTC" "2014-02-04 00:04:00 UTC"
[5] "2014-02-05 00:05:00 UTC"

或者甚至是

strptime(paste(a$date,a$time),"%Y-%m-%d %H %M")
[1] "2014-02-01 00:01:00 PST" "2014-02-02 00:02:00 PST"
[3] "2014-02-03 00:03:00 PST" "2014-02-04 00:04:00 PST"
[5] "2014-02-05 00:05:00 PST"