Reputation: 35
i have problem with my R code. I am trying to use casewhen to distribute time attribute into part of the day.
data_aoi_droped = data_aoi_droped %>%
mutate (Day_Time = case_when(
Hour >= 05 & Hour < 09 ~ "Rano",
Hour >= 09 & Hour < 11 ~ "Doobeda",
Hour >= 11 & Hour < 13 ~ "Obed",
Hour >= 13 & Hour < 16 ~ "Poobede",
Hour >= 16 & Hour < 19 ~ "Podvecer",
Hour >= 19 & Hour < 22 ~ "Vecer",
Hour >= 22 | Hour < 05 ~ "Noc"
)
)
head(data_aoi_droped,20)
Here you can see the result, as you can see the casewhen is ignoring part with "Rano", which means morning.
Upvotes: 0
Views: 94
Reputation: 10627
I recommend using cut
over case_when
because your splits were just next to each other. The result does not contain time perioids which are not part of the data.
library(tidyverse)
data_aoi_droped <- tibble(Hour = c(0,7,11,15,17,20,21))
data_aoi_droped %>%
mutate(
Day_Time = Hour %>% cut(
breaks = c(5,9,11,13,16,19,22),
labels = c("Rano", "Doobeda", "Obed", "Poobede", "Podvecer", "Vecer")
) %>% as.character() %>% replace_na("Noc")
)
#> # A tibble: 7 × 2
#> Hour Day_Time
#> <dbl> <chr>
#> 1 0 Noc
#> 2 7 Rano
#> 3 11 Doobeda
#> 4 15 Poobede
#> 5 17 Podvecer
#> 6 20 Vecer
#> 7 21 Vecer
data_aoi_droped %>%
complete(Hour = seq(24)) %>%
mutate(
Day_Time = Hour %>% cut(
breaks = c(5,9,11,13,16,19,22),
labels = c("Rano", "Doobeda", "Obed", "Poobede", "Podvecer", "Vecer")
) %>% as.character() %>% replace_na("Noc")
) %>%
print(n=Inf)
#> # A tibble: 25 × 2
#> Hour Day_Time
#> <dbl> <chr>
#> 1 1 Noc
#> 2 2 Noc
#> 3 3 Noc
#> 4 4 Noc
#> 5 5 Noc
#> 6 6 Rano
#> 7 7 Rano
#> 8 8 Rano
#> 9 9 Rano
#> 10 10 Doobeda
#> 11 11 Doobeda
#> 12 12 Obed
#> 13 13 Obed
#> 14 14 Poobede
#> 15 15 Poobede
#> 16 16 Poobede
#> 17 17 Podvecer
#> 18 18 Podvecer
#> 19 19 Podvecer
#> 20 20 Vecer
#> 21 21 Vecer
#> 22 22 Vecer
#> 23 23 Noc
#> 24 24 Noc
#> 25 0 Noc
Created on 2022-04-04 by the reprex package (v2.0.0)
Upvotes: 2