1

データフレーム「df.data」に「Day_period」という名前の新しい列を作成しようとしました。これは次の値を取ります:「早朝」列「Times」の値が「05:00:00」と「08」の間の場合:59:00"、"chron" パッケージを使用:

require(chron)

early.morning.start <- times("05:00:00")
early.morning.stop <- times("08:59:00")

df.data$Day_period[which(df.data$Times >= early.morning.start && df.data$Times <=          
early.morning.stop)] <- "Early Morning"

しかし、上記のコードは機能していないようです。

4

1 に答える 1

3

これが1つの方法です。OPのコメントを考えると、cutここでは使用が良いアプローチのようです。再現可能な例がないため、機能を示すために小さなサンプルを作成しました。data.table大きなデータセットがあるので、R を更新してパッケージを使用したいと思います。古いバージョンの R に固執する場合は、このtransformアプローチを選択することになります。

# Create a sample data
mydf <- data.frame(id = 1:7,
                   time = c("01:00:00", "05:30:00", "10:00:00",
                            "14:00:00", "17:00:00", "20:00:00", "23:00:00"),
                   stringsAsFactors = FALSE)

#  id     time
#1  1 01:00:00
#2  2 05:30:00
#3  3 10:00:00
#4  4 14:00:00
#5  5 17:00:00
#6  6 20:00:00
#7  7 23:00:00

library(chron)
library(dplyr)
library(data.table)

# Convert character to times
mydf$time <- times(mydf$time)

# Base R approach
transform(mydf,
          day_period = cut(time,
                       breaks = times(c("00:00:00", "05:00:00", "09:00:00",
                                        "13:00:00", "17:00:00", "21:00:00", "23:59:00")),
                       labels = c("Late night", "Early morning", "Late morning",
                                  "Early afternoon", "Late afternoon", "Evening")))
# dplyr approach
mutate(mydf,
       day_period = cut(time,
                        breaks = times(c("00:00:00", "05:00:00", "09:00:00",
                                         "13:00:00", "17:00:00", "21:00:00", "23:59:00")),
                        labels = c("Late night", "Early morning", "Late morning",
                                   "Early afternoon", "Late afternoon", "Evening")))

# data.table approach
setDT(mydf)[, day_period := cut(time,
                                breaks = times(c("00:00:00", "05:00:00", "09:00:00",
                                                 "13:00:00", "17:00:00", "21:00:00",
                                                 "23:59:00")),
                                labels = c("Late night", "Early morning", "Late morning",
                                           "Early afternoon", "Late afternoon", "Evening"))][]

#   id     time      day_period
#1:  1 01:00:00      Late night
#2:  2 05:30:00   Early morning
#3:  3 10:00:00    Late morning
#4:  4 14:00:00 Early afternoon
#5:  5 17:00:00 Early afternoon
#6:  6 20:00:00  Late afternoon
#7:  7 23:00:00         Evening
于 2015-01-01T13:36:37.647 に答える