假设我要有3个指示器
指标,如果旅行在AM高峰开始,则为1:8:00 –9:59
指标,如果旅行在下午高峰开始,则为1:16:00 –17:59
指示器,如果旅程在中午开始,则为1:10:00 –15:59
我在不同的列中都有小时和分钟
ARR_HR ARR_MIN
16 30
10 0
11 5
我该怎么做?
因此输出必须是
AM pick PM pick midday
0 1 0
0 0 1
0 0 1
答案 0 :(得分:1)
从列let array = str.split(", ").reduce((prev, curr, i) => {
if(i%4 === 0){
prev.push([]);
}
prev[prev.length - 1].push(curr);
return prev;
}, [])
的名称来看,似乎是一天中的小时,始终是整数。您可以为此使用ARR_HR
。这样做的好处是您可以继续轻松地用新的cut
增加breaks
。
labels
如果还有时间,则需要将get_levels <- cut(df$ARR_HR, breaks = c(8, 10, 16, Inf),
labels = c("AM_Pick", "Midday", "PM_Pick"), right = FALSE)
df[levels(get_levels)] <- t(sapply(get_levels, function(x)
as.integer(levels(get_levels) %in% x)))
df
# ARR_HR ARR_MIN AM_Pick Midday PM_Pick
#1 16 30 0 0 1
#2 10 0 0 1 0
#3 11 5 0 1 0
和ARR_HR
转换为breaks
的值并使用。
一种更乏味的方法是检查每个休息时间的范围。不利的一面是,您添加的休息时间会越来越长。
POSIXct