通过更改 r 中的周开始计算周数
calculate week number by changing the start of week in r
我试图通过将一周的开始从第 7 天(在 lubridate 中,默认星期日 = 7)移动到第 5 天(星期五)来计算周数注意:如果你得到来自 lubridate 的 wday
函数的星期几,它将 return 星期日为 1,星期五为 6,但为了让我的星期计数器开始星期五,它的日指数-1。
也就是说,我编写了一个继续抛出错误的函数。
dates <- seq.Date(ymd(20150101), ymd(20171231), by = 1)
friday_week <- function(dates) {
require(lubridate)
require(data.table)
require(dplyr)
dates = if(is.Date(dates) == F) {
stop("this must be a date object")
}
date_yr = lubridate::year(dates)
wk_days = lubridate::wday(dates, week_start = 5)
date_df = data.frame(date_yr, wk_days) %>% data.table()
date_df[ , fri_wk := ifelse(cumsum(wk_days == 1) < 53, cumsum(wk_days == 1)
+ 1, cumsum(wk_days == 1)), by = date_yr]
return(date_df$fri_wk)
}
运行 它带有日期,我收到此消息:
Error in as.POSIXlt.default(x, tz = tz(x)) :
do not know how to convert 'x' to class “POSIXlt”
但是当我 运行 函数内的代码行在函数外逐行显示时,它产生的正是我想要的。
我迷路了。
你的错误应该在
dates = if(is.Date(dates) == F) {
stop("this must be a date object")
}
删除 dates =
部分。
变化:
dates = if(is.Date(dates) == F) {
stop("this must be a date object")
}
至:
if(is.Date(dates) == F) {
stop("this must be a date object")
}
在你调用lubridate::year(dates)
的那一刻,dates
是NULL
。在 lubridate::year()
函数中,它试图将 NULL
转换为 POSIX.lt
x <- NULL
as.POSIXlt(x)
# Error in as.POSIXlt.default(x) :
# do not know how to convert 'x' to class “POSIXlt”
了解如何使用 debug()
和浏览器。它将帮助您找到错误 :)
我试图通过将一周的开始从第 7 天(在 lubridate 中,默认星期日 = 7)移动到第 5 天(星期五)来计算周数注意:如果你得到来自 lubridate 的 wday
函数的星期几,它将 return 星期日为 1,星期五为 6,但为了让我的星期计数器开始星期五,它的日指数-1。
也就是说,我编写了一个继续抛出错误的函数。
dates <- seq.Date(ymd(20150101), ymd(20171231), by = 1)
friday_week <- function(dates) {
require(lubridate)
require(data.table)
require(dplyr)
dates = if(is.Date(dates) == F) {
stop("this must be a date object")
}
date_yr = lubridate::year(dates)
wk_days = lubridate::wday(dates, week_start = 5)
date_df = data.frame(date_yr, wk_days) %>% data.table()
date_df[ , fri_wk := ifelse(cumsum(wk_days == 1) < 53, cumsum(wk_days == 1)
+ 1, cumsum(wk_days == 1)), by = date_yr]
return(date_df$fri_wk)
}
运行 它带有日期,我收到此消息:
Error in as.POSIXlt.default(x, tz = tz(x)) :
do not know how to convert 'x' to class “POSIXlt”
但是当我 运行 函数内的代码行在函数外逐行显示时,它产生的正是我想要的。
我迷路了。
你的错误应该在
dates = if(is.Date(dates) == F) {
stop("this must be a date object")
}
删除 dates =
部分。
变化:
dates = if(is.Date(dates) == F) {
stop("this must be a date object")
}
至:
if(is.Date(dates) == F) {
stop("this must be a date object")
}
在你调用lubridate::year(dates)
的那一刻,dates
是NULL
。在 lubridate::year()
函数中,它试图将 NULL
转换为 POSIX.lt
x <- NULL
as.POSIXlt(x)
# Error in as.POSIXlt.default(x) :
# do not know how to convert 'x' to class “POSIXlt”
了解如何使用 debug()
和浏览器。它将帮助您找到错误 :)