2016-03-23 5 views
1

Ich habe eine Datenmenge, die wie folgt aussieht:Binning Stunden in R

datetime  Normaltime 
--------- ---------- 
1443446880 2015-09-28 06:28:00 
1443450600 2015-09-28 07:30:00 
1443451740 2015-09-28 07:49:00 

Eine Spalte in UNIX Zeit ist, die andere ist in normalen Zeiten.

Ich möchte 4 neue Spalten für verschiedene Stundenfenster erstellen, wie würde ich diese erstellen?

Ich mag es so etwas wie dieser

datetime  Normaltime    Daypart 
--------- ----------   --------- 
1443446880 2015-09-28 06:28:00 Morning 
1443450600 2015-09-28 07:30:00 Morning 
1443451740 2015-09-28 07:49:00 Morning 
1443468600 2015-09-28 12:30:00 Afternoon 

Dank suchen!

+0

Sie meinen, neue Spalte 'Daypart' mit 4 verschiedenen Werten für Stundenfenster zu erstellen? Was wären diese Fenster? – mtoto

+0

Oh ja, eine Spalte, 4 Teile. 0-6, 6-9, 9-4, 4-11: 59 – Julia

+0

Wie möchten Sie diese vier Teile beschriften? – DatamineR

Antwort

0

Basis R Verwendung:

df$Daypart <- ifelse(format(as.POSIXct(df$Normaltime),"%H") >= "00" & format(as.POSIXct(df$Normaltime),"%H") < "06", "Overnight", 
ifelse(format(as.POSIXct(df$Normaltime),"%H") >= "06" & format(as.POSIXct(df$Normaltime),"%H") < "09","Morning", 
ifelse(format(as.POSIXct(df$Normaltime),"%H") >= "09" & format(as.POSIXct(df$Normaltime),"%H") < "16", "Afternoon","Prime") 
4

Sie könnten versuchen, (Tipp von Gregor verwenden):

library(lubridate) 

df$Daypart <- cut(hour(ymd_hms(df$Normaltime)), c(0,6,9,14,Inf), 
    c("Overnight", "Morning", "Afternoon", "Prime")) 
df 
    datetime   Normaltime Daypart 
1 1443446880 2015-09-28 06:28:00 Overnight 
2 1443450600 2015-09-28 07:30:00 Morning 
3 1443451740 2015-09-28 07:49:00 Morning 
4 1443468600 2015-09-28 12:30:00 Afternoon 
3

Sie findInterval verwenden könnte es in eine ziemlich einfache Art und Weise zu tun;

#  datetime   Normaltime 
# 1 1443446880 2015-09-28 05:59:59 
# 2 1443446880 2015-09-28 06:00:00 
# 3 1443446880 2015-09-28 06:28:00 
# 4 1443450600 2015-09-28 07:30:00 
# 5 1443451740 2015-09-28 07:49:00 
# 6 1443451780 2015-09-28 15:00:00 
# 7 1443451780 2015-09-28 16:00:00 

df$Daypart = (c('overnight', 'morning', 'afternoon', 'prime') 
       [findInterval(hour(df$Normaltime), c(-Inf, 6, 9, 16, Inf))]) 

#  datetime   Normaltime Daypart 
# 1 1443446880 2015-09-28 05:59:59 overnight 
# 2 1443446880 2015-09-28 06:00:00 morning 
# 3 1443446880 2015-09-28 06:28:00 morning 
# 4 1443450600 2015-09-28 07:30:00 morning 
# 5 1443451740 2015-09-28 07:49:00 morning 
# 6 1443451780 2015-09-28 15:00:00 afternoon 
# 7 1443451780 2015-09-28 16:00:00  prime 
Verwandte Themen