将时间值突变为分类值

问题描述

我当前有一个带有字符形式时间戳的数据框,我已将其转换为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")))

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...