dates <- NULL
date <- as.Date("01/01/2014","%d/%m/%Y")
dates <- data.frame(date=as.Date(character())
,cal_day_in_year_num = numeric()
,cal_week_id = numeric()
,cal_week_start_date = as.Date(character())
,cal_week_end_date = as.Date(character())
)
for (i in 1:365) {
dates[i,1] <- date + days(i-1) ## date
dates[i,2] <- yday(dates[i,1]) ## cal_day_in_year_num
dates[i,3] <- paste(year(dates[i,1]),sprintf("%02d",week(dates[i,1])),sep="") ## cal_week_id
dates[i,4] <- floor_date(dates[i,1], "week") ## cal_week_start_date
dates[i,5] <- ceiling_date(dates[i,1], "week") ## cal_week_end_date
}
View(dates)
दी गई तारीखों के लिए, मैं सप्ताह के संबंधित प्रारंभ और समाप्ति तिथियों की गणना करने के लिए लुब्रिडेट फ़ंक्शन का उपयोग करने की कोशिश कर रहा हूं
इस मुद्दे पर मैं यह कह रहा हूं कि लुब्रिडेट सप्ताह का पहला दिन रविवार होने के लिए है, जहां मुझे सोमवार होने की आवश्यकता है - क्या किसी के पास इस तरह से गोल करने का कोई तरीका है?
उत्तर:
जवाब के लिए 9 № 1आधार में ऐसा करने के लिए आप अपने स्वयं के कार्य कर सकते हैं। उदाहरण के लिए,
start.of.week <- function(date)
date - (setNames(c(6,0:5),0:6) [strftime(date,"%w")])
end.of.week <- function(date)
date + (setNames(c(0,6:1),0:6) [strftime(date,"%w")])
start.of.week(as.Date(c("2014-01-05","2014-10-02","2014-09-22","2014-09-27")))
# "2013-12-30" "2014-09-29" "2014-09-22" "2014-09-22"
end.of.week(as.Date(c("2014-01-05","2014-10-02","2014-09-22","2014-09-27")))
# "2014-01-05" "2014-10-05" "2014-09-28" "2014-09-28"
उत्तर № 2 के लिए -1
जैसा कि वेव ने टिप्पणी की थी, आप तिथि बदलने के लिए सिर्फ +1 का उपयोग कर सकते हैं। आप धीमे की आवश्यकता के बिना भी ऐसा ही कर सकते हैं for
पाश।
date <- as.Date("01/01/2014","%d/%m/%Y")
yday(date) <-yday(date) + 0:364
dates <- data.frame(date = date,
cal_day_in_year_num = yday(date),
cal_week_id = paste(year(date),sprintf("%02d",week(date)),sep=""),
cal_week_start_date = NA,
cal_week_end_date = NA
)
# find the minimum date in the time series
min_date <- min(dates$date)
# find the previous Monday of the minimum date
for(i in 1:7){
if(wday(min_date-i, label=TRUE)=="Mon"){
start_date <- min_date-i
}
}
# get the number of days between the minimum date and all days
diff_days <- as.numeric(difftime(dates$date,start_date, units="days"))
# Remove the excess days from each date
dates$cal_week_start_date <- dates$date-diff_days%%7
# Fix up the end of the week based on the start of the week
dates$cal_week_end_date <- dates$cal_week_start_date+7