R - 转换为日期格式时,周 - 年:周的字符串丢失

zzk*_*zzk 5 datetime r string-formatting

我有一个年周格式的字符串,如下所示:

weeks.strings <- c("2002-26", "2002-27", "2002-28", "2002-29", "2002-30", "2002-31")
Run Code Online (Sandbox Code Playgroud)

但是,将此字符转换为Date类会导致丢失星期标识符:

> as.Date(weeks.strings, format="%Y-%U")
[1] "2002-08-28" "2002-08-28" "2002-08-28" "2002-08-28" "2002-08-28"
[6] "2002-08-28"
Run Code Online (Sandbox Code Playgroud)

如上所示,格式转换为与今天日期连接的年份,因此有关原始周的任何信息都将丢失(例如,使用格式函数或strptime尝试强制回原始格式.

我在帮助组中找到的一个解决方案是指定星期几:

as.Date(weeks.strings, format="%Y-%u %U")
[1] "2002-02-12" "2002-02-19" "2002-02-26" "2002-03-05" "2002-01-02"
[6] "2002-01-09"
Run Code Online (Sandbox Code Playgroud)

但看起来这会导致不正确的周编号(与原始字符串不匹配).

任何指导将不胜感激.

Jos*_*ich 10

您只需要在工作日添加一个工作日,weeks.strings以使日期明确无误(改编自Jim Holtman对R-help的回答).

as.Date(paste(weeks.strings,1),"%Y-%U %u")
Run Code Online (Sandbox Code Playgroud)

正如评论中所指出的,如果日期跨越很长的时间范围,那么Date类是不合适的,因为 - 在某些时候 - 所选择的工作日将不会存在于该年的第一周/最后一周.在这种情况下,您可以使用数字向量,其中整个部分是年份,小数部分是周/年的分数.例如:

wkstr <- sprintf("%d-%02d", rep(2000:2012,each=53), 0:52)
yrwk <- lapply(strsplit(wkstr, "-"), as.numeric)
yrwk <- sapply(yrwk, function(x) x[1]+x[2]/53)
Run Code Online (Sandbox Code Playgroud)