/ / रविवार के बजाय सोमवार को शुरू करने के लिए लुब्रिडेट फ़ंक्शन बदलना - आर, लुब्रिडेट

सोमवार को सोमवार को शुरू होने के लिए लुब्रिडेट फ़ंक्शन बदलना - आर, लुब्र्रिडेट

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