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

  • 本文关键字:转换 两列 日期 时间 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 ??

我们可以在按空格 (" "(split"time" 列后使用sprintf来获得所需的格式

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"

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

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"

最新更新