将时间值变异为分类值
Mutate Time values into categorical values
我目前有一个带有字符形式时间戳的数据框,我将其转换为 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" ))
Time
属于 period
class。从中提取小时并将其用于 case_when
:
library(dplyr)
df %>%
mutate(hour = Time@hour,
Time_of_day = case_when(
hour <= 6 ~ "Night",
hour <= 10 ~ "Morning",
hour <= 14 ~ "Midday",
hour <= 18 ~ "Afternoon",
hour > 19 ~ "Night"))
列Time
属于class<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 中使用多个条件。
library(dplyr)
df %>%
mutate(Time2 = cut(Time@hour, breaks = c(-Inf, 6, 10, 14, 18, Inf),
labels = c("Night", "Morning", "Midday", "Afternoon", "Night")))
我目前有一个带有字符形式时间戳的数据框,我将其转换为 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" ))
Time
属于 period
class。从中提取小时并将其用于 case_when
:
library(dplyr)
df %>%
mutate(hour = Time@hour,
Time_of_day = case_when(
hour <= 6 ~ "Night",
hour <= 10 ~ "Morning",
hour <= 14 ~ "Midday",
hour <= 18 ~ "Afternoon",
hour > 19 ~ "Night"))
列Time
属于class<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 中使用多个条件。
library(dplyr)
df %>%
mutate(Time2 = cut(Time@hour, breaks = c(-Inf, 6, 10, 14, 18, Inf),
labels = c("Night", "Morning", "Midday", "Afternoon", "Night")))