将时间对象转换为R中的分类(上午、下午、晚上、晚上)变量?

将时间对象转换为R中的分类(上午、下午、晚上、晚上)变量?,r,time,R,Time,我有一个时间数据框中的向量,格式为小时:分钟,我想转换为一天中的分类时间: time <- c("15:03", "08:01", "11:59", "23:47", "14:20") df$time <- format(strptime(df$time, tz = "" , format = "%H: %M"), format = "%H: %M") df <- data.frame(time) time我想这就完成了,我不知道如何才能剪到一个合适的

我有一个时间数据框中的向量,格式为小时:分钟,我想转换为一天中的分类时间:

    time <- c("15:03", "08:01", "11:59", "23:47", "14:20")
    df$time <- format(strptime(df$time, tz = "" , format = "%H: %M"), format = "%H: %M")
    df <- data.frame(time)

time我想这就完成了,我不知道如何才能剪到一个合适的重复标签,但也许其他人会。关键是使用
chron::times()
创建一个按时间顺序排列的对象,而不是datetime对象

time <- c("15:03", "08:01", "11:59", "23:47", "14:20")
timep <- as.POSIXct(time, format = "%H:%M") %>% format("%H:%M:%S")
cut(chron::times(timep) , breaks = (1/24) * c(0,5,11,16,19,24), 
    labels = c("night", "morning", "afternoon", "evening", "night1"))

# [1] afternoon morning   afternoon night1    afternoon
# Levels: night morning afternoon evening night1

time
time使用一些
regex
ifelse

df$hour <- as.numeric(gsub("\\:.*$", "", df$time))
df$cat <- with(df,  ifelse(hour >= 5 & hour<=11, "morning",
                            ifelse(hour>11 & hour<=16, "evening", "night")))
df
   time hour     cat
1 15:03   15 evening
2 08:01    8 morning
3 11:59   11 morning
4 23:47   23   night
5 14:20   14 evening

df$hour这个类似于@onyanbu,只使用了
plyr
mapvalues()
lubridate
hour()

库(lubridate)
图书馆(plyr)

df$timeofdat我能够使用
ifelse
语句进行分类。我将
strtime
改为
as.POSIXct
,只保留了一小时来分组。在df中,有3列代表原始时间,仅代表小时,然后是组。如果类别需要成为因子,则可以使用
as.factor
将其更改为因子

time <- c("15:03", "08:01", "11:59", "23:47", "14:20")

time2 <- format(as.POSIXct(time, tz = "" , format = "%H: %M"), "%H")

df <- data.frame(time, time2 = as.numeric(time2))

df$time_category <- ifelse(df$time2 >= 05 & df$time2 <= 11, "Morning",
            ifelse(df$time2 > 11 & df$time2 <= 16, "Afternoon",
            ifelse(df$time2 > 16 & df$time2 <= 19, "Evening", "Night")))
时间
time <- as.POSIXct(strptime(c("15:03", "08:01", "11:59", "23:47", "14:20"),"%H:%M"),"UTC")

x=as.POSIXct(strptime(c("000000","050000","110000","160000","190000","235959"),
                      "%H%M%S"),"UTC")
labs=c("night","morning","afternoon","evening","night")
labs[findInterval(time,x)]
[1] "afternoon" "morning"   "afternoon" "night"     "afternoon"
df$hour <- as.numeric(gsub("\\:.*$", "", df$time))
df$cat <- with(df,  ifelse(hour >= 5 & hour<=11, "morning",
                            ifelse(hour>11 & hour<=16, "evening", "night")))
df
   time hour     cat
1 15:03   15 evening
2 08:01    8 morning
3 11:59   11 morning
4 23:47   23   night
5 14:20   14 evening
library(lubridate)
library(plyr)
df$timeofdat<-   mapvalues(hour(df$time),from=c(0:23),
  to=c(rep("night",times=5), rep("morning",times=6),rep("afternoon",times=5),rep("night", times=8)))
time <- c("15:03", "08:01", "11:59", "23:47", "14:20")

time2 <- format(as.POSIXct(time, tz = "" , format = "%H: %M"), "%H")

df <- data.frame(time, time2 = as.numeric(time2))

df$time_category <- ifelse(df$time2 >= 05 & df$time2 <= 11, "Morning",
            ifelse(df$time2 > 11 & df$time2 <= 16, "Afternoon",
            ifelse(df$time2 > 16 & df$time2 <= 19, "Evening", "Night")))