将时间值突变为分类值

问题描述

我当前有一个带有字符形式时间戳的数据框,我已将其转换为HMS

df$Time <- hms(df$Time)

我正在尝试更改数据集,使其包含一天中的某个时间的分类

ReceiptNo   Time
99          14H 53M 55S
98          14H 53M 43S
97          14H 53M 28S
96          14H 53M 8S
95          14H 52M 53S
94          14H 52M 1S
93          14H 51M 41S
92          14H 51M 15S
91          14H 51M 0S
90          14H 50M 42S

我尝试了以下各种变体来突变新列,但没有成功

df %>% 
  mutate(Time = case_when(
    Time <= 6 ~ "Night",Time <= 10 ~ "Morning",Time <= 14 ~ "Midday",Time <= 18 ~ "Afternoon",Time > 19 ~ "Night" ))

解决方法

npm i angular-ui-carousel Time类的。从中提取小时,然后在period中使用它:

case_when
,

Time属于类<Period>,它记录了从00:00:00开始经过的秒数。您需要将这些时间点转换为<Period>个对象。

library(dplyr)
library(lubridate)

df %>% 
  mutate(Time2 = case_when(
    Time <= hours(6) ~ "Night",Time <= hours(10) ~ "Morning",Time <= hours(14) ~ "Midday",Time <= hours(18) ~ "Afternoon",TRUE ~ "Night" ))

# # A tibble: 6 x 3
#   ReceiptNo Time        Time2    
#   <chr>     <Period>    <chr>    
# 1 101       14H 54M 35S Afternoon
# 2 102       14H 54M 51S Afternoon
# 3 103       14H 55M 5S  Afternoon
# 4 104       14H 55M 26S Afternoon
# 5 105       14H 56M 13S Afternoon
# 6 106       14H 57M 43S Afternoon
,

在case_when中可以使用带有标签的cut时,不要使用多个条件。

library(dplyr)
df %>%
    mutate(Time2 = cut(Time@hour,breaks = c(-Inf,6,10,14,18,Inf),labels = c("Night","Morning","Midday","Afternoon","Night")))