我是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。
答案 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)
lubridate让日期变得简单。希望这对您的项目有所帮助和最好的问候。