fararmaoholcezoltar
fararmaoholcezoltar

Reputation: 35

Casewhen ignoring one case in R

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.

enter image description here

Upvotes: 0

Views: 94

Answers (1)

danlooo
danlooo

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

Related Questions