R日期时间转换

时间:2015-05-19 01:07:35

标签: r date datetime

我是R的新手,我有一个日期时间为变量的数据框。每天每小时记录一次温度,日期时间格式为YYYY-MM-DD 00:00:00。 现在我想将时间转换为每天0到23的因子。 因此,对于每一天,我的新专栏应该有0到23的因子。任何人都可以帮我这个吗?我的2015-01-01 00:00:00,应该给我0,而2015-01-01 01:00:00,应该给我1等等。我的2015-01-02 00:00:00也应该是0。

4 个答案:

答案 0 :(得分:4)

您可以将时间戳转换为POSIXlt对象。一旦你有了这个,你可以像这样直接获得小时:

> timestamp <- as.POSIXlt("2015-01-01 00:00:00")
> timestamp
[1] "2015-01-01 MYT"
> timestamp$hour
[1] 0

答案 1 :(得分:1)

使用样本数据,一种方法如下。

mydf <- data.frame(id = c(1,1,1,2,2,1,1),
                   event = c("start", "valid", "end", "start", "bad", "start", "bad"),
                   time = as.POSIXct(c("2015-05-16 20:46:53", "2015-05-16 20:46:56", "2015-05-16 21:46:59",
                                   "2015-05-16 22:46:53", "2015-05-16 22:47:00", "2015-05-16 22:49:05",
                                   "2015-05-16 23:49:09"), format = "%Y-%m-%d %H:%M:%S"),
                   stringsAsFactors = FALSE)

library(dplyr)
mutate(mydf, group = factor(format(time, "%H")))

#  id event                time group
#1  1 start 2015-05-16 20:46:53    20
#2  1 valid 2015-05-16 20:46:56    20
#3  1   end 2015-05-16 21:46:59    21
#4  2 start 2015-05-16 22:46:53    22
#5  2   bad 2015-05-16 22:47:00    22
#6  1 start 2015-05-16 22:49:05    22
#7  1   bad 2015-05-16 23:49:09    23

答案 2 :(得分:1)

使用POSIXlt的Tim回答可能是最好的选择,但以下是正则表达方式:

> times <- c("2015-01-01 00:00:00", "2015-01-01 01:00:00", "2015-01-02 00:00:00")
> regmatches(times, regexpr("(?<=-\\d{2} )\\d{2}", times, perl=TRUE))
[1] "00" "01" "00"

根据提取的小时数,您可以根据需要制作因子或整数。

答案 3 :(得分:1)

@Sairam,除了@ jazzurro使用&#39; dplyr&#39; (就像jazzurro一样,许多R-insitas经常使用)......将来,如果你需要/想要一个简单的&amp;有效的操纵日期的方式,你被鼓励熟悉另一个方案:&#39; lubridate。&#39;

lubridate让日期变得简单。希望这对您的项目有所帮助和最好的问候。