我有以下数据框:
Date.POSIXct Date WeekDay DayCategory Hour Holidays value
1 2018-05-01 00:00:00 2018-05-01 MA MA-MI-JU 0 0 30
2 2018-05-01 01:00:00 2018-05-01 MA MA-MI-JU 1 0 80
3 2018-05-01 02:00:00 2018-05-01 MA MA-MI-JU 2 0 42
4 2018-05-01 03:00:00 2018-05-01 MA MA-MI-JU 3 0 90
5 2018-05-01 04:00:00 2018-05-01 MA MA-MI-JU 4 0 95
6 2018-05-01 05:00:00 2018-05-01 MA MA-MI-JU 5 0 5
DayCategory 按以下方式对一周中的几天进行分组:Mondays 转到LUDayCategory。周二、周三和周四转到MA-MI-JUDayCategory。周五转至VI,周六转至SA,周日转至DO类别。
我想在前一天 ( )中找到value相同的相同,而仍然在同一组中(例如,如果一个实例有0,但前一天相同有 1,我们应该查找前一个,等等。 )hourDateDayCategoryHolidaysholidayDayCategory
作为中间步骤并了解该过程,我想添加一个PreviousDaySameDayCategory与Date前一天具有相同DayCategory对应行的列。有时它会date减去 7 天(“LU”、“VI”、“SA”、“DO”),但其他日子只会是 1 天。
可重现的数据:
library(lubridate)
Date.POSIXct <- seq(as.POSIXct("2018-05-01"), as.POSIXct("2018-05-31"), "hour")
mydf <- as.data.frame(Date.POSIXct)
mydf$Date <- as.Date(substr(as.character(mydf$Date.POSIXct),1,10))
mydf$WeekDay <- substr(toupper((weekdays(mydf$Date))),1,2)
mydf$DayCategory <-as.factor(ifelse(mydf$WeekDay == "MA" | mydf$WeekDay == "MI" | mydf$WeekDay == "JU",
"MA-MI-JU", mydf$WeekDay))
mydf$Hour <- hour(mydf$Date.POSIXct)
mydf$Holidays <- c(rep(0, 24*7),rep(1, 24*7), rep(0, 24*16+1))
set.seed(123)
mydf$myvalue <- sample.int(101,size=nrow(mydf),replace=TRUE)
我已经手动开始了第一天,并创建了一个解决方案应该是什么样子的向量:
a <- rep(NA, 24)
b <- mydf$value[1:24]
c <- mydf$value[25:48]
d <- rep(NA, 24)
e <- rep(NA,24)
f <- rep(NA,24)
g <- rep(NA,24)
h <- rep(NA,24)
i <- mydf$value[169:192]
solution <- c(a,b,c,d,e,f,g,h,i)
solution
我将不胜感激思考过程中的任何提示,以解决我相对频繁面临的此类问题。
我还在 Stack Over Flow 中发布了这个问题,我想这种问题更适合这个社区而不是 StackOverflow,这是正确的吗?我想删除不太适合社区的那个。