我想以字符串格式从给定日期获取 ISO 周数,其中星期一是一周的第一天,包含一年中第一个星期四的那一周被认为是第一周。
从其他答案来看,我认为 strftime("2017-11-18", format = "%V")
最适合我的目的。
但是它不适用于 Windows。
对仅使用 R 中的基础包的替代品有什么建议吗?
最佳答案
使用包 lubridate
它有一个函数 isoweek()
可以给你一个给定日期的 ISOWeek
lubridate::isoweek("2017-11-18")
[1] 46
现在您只想使用基础包。这是 ISO 周 lubridate 的代码
function (x)
{
xday <- make_datetime(year(x), month(x), day(x))
dn <- 1 + (wday(x) + 5)%%7
nth <- xday + ddays(4 - dn)
jan1 <- make_datetime(year(nth), 1, 1)
1L + as.integer(difftime(nth, jan1, units = "days"))%/%7L
}
我们可以把它变成只使用基础包的东西。
myIsoweek <- function (x)
{
dateList <- as.list(strsplit(as.character(as.Date(x)),split = "-")[[1]])
names(dateList) <- c("year","month","day")
weekday <- as.POSIXlt(x)[["wday"]] + 1
xday <- ISOdate(dateList$year, dateList$month, dateList$day)
dn <- 1 + (weekday + 5)%%7
nth <- xday + 86400*(4 - dn)
jan1 <- ISOdate(format(nth,format = "%Y"), 1, 1)
1L + as.integer(difftime(nth, jan1, units = "days"))%/%7L
}
https://stackoverflow.com/questions/47509567/