Trasforma i valori Tempo in valori categorici
Aug 21 2020
Al momento ho un frame di dati con un timestamp in formato carattere che ho convertito in HMS
df$Time <- hms(df$Time)
Sto cercando di mutare il set di dati per includere una colonna categorica con l'ora del giorno
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
Ho provato diverse varianti di quanto segue per mutare una nuova colonna senza successo
df %>%
mutate(Time = case_when(
Time <= 6 ~ "Night",
Time <= 10 ~ "Morning",
Time <= 14 ~ "Midday",
Time <= 18 ~ "Afternoon",
Time > 19 ~ "Night" ))
Risposte
1 RonakShah Aug 21 2020 at 13:37
Time
è di period
classe. Estrai l'ora da esso e usalo in 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"))
1 DarrenTsai Aug 21 2020 at 13:42
La colonna Time
è della classe <Period>
, che registra il numero di secondi che passano da 00:00:00
. Devi convertire quei punti temporali in <Period>
oggetti.
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
1 akrun Aug 22 2020 at 02:45
Invece di usare condizioni multiple in case_when possiamo usare cut with labels.
library(dplyr)
df %>%
mutate(Time2 = cut(Time@hour, breaks = c(-Inf, 6, 10, 14, 18, Inf),
labels = c("Night", "Morning", "Midday", "Afternoon", "Night")))