시간 값을 범주 값으로 변경

Aug 21 2020

현재 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" ))

답변

1 RonakShah Aug 21 2020 at 13:37

Time입니다 period클래스입니다. 그것에서 시간을 추출하고 다음에서 사용하십시오 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

이 열 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
1 akrun Aug 22 2020 at 02:45

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")))