時間値をカテゴリ値に変更します
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で複数の条件を使用する代わりに、ラベル付きのカットを使用できます。
library(dplyr)
df %>%
mutate(Time2 = cut(Time@hour, breaks = c(-Inf, 6, 10, 14, 18, Inf),
labels = c("Night", "Morning", "Midday", "Afternoon", "Night")))