将时间对象转换为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
timetime使用一些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")))