Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-带有周-年:周的字符串在转换为日期格式时丢失_R_Datetime_String Formatting - Fatal编程技术网

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

R-带有周-年:周的字符串在转换为日期格式时丢失,r,datetime,string-formatting,R,Datetime,String Formatting,我有一个日期字符串,其格式为年-周格式,如下所示: weeks.strings <- c("2002-26", "2002-27", "2002-28", "2002-29", "2002-30", "2002-31") 如上所示,格式转换为年-与今天的日期连接,因此有关原始周的任何信息都将丢失(例如-在使用format函数或strTime尝试并强制转换回原始格式时) 我在帮助组中找到的一个解决方案是指定一周中的哪一天: as.Date(weeks.strings, format="%Y

我有一个日期字符串,其格式为年-周格式,如下所示:

weeks.strings <- c("2002-26", "2002-27", "2002-28", "2002-29", "2002-30", "2002-31")
如上所示,格式转换为年-与今天的日期连接,因此有关原始周的任何信息都将丢失(例如-在使用format函数或strTime尝试并强制转换回原始格式时)

我在帮助组中找到的一个解决方案是指定一周中的哪一天:

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"
但这似乎会导致不正确的周编号(与原始字符串不匹配)


任何指导都将不胜感激。

显然,没有唯一的解决方案,因为每周最多可以有7个不同的日期。也就是说,这里有一个想法:

weeks.strings <- c("2002-26", "2002-27", "2002-28", "2002-29",
                   "2002-30", "2002-31")

x <- as.Date("2002-1-1", format="%Y-%m-%d") + (0:52*7)
x[match(weeks.strings, format(x, "%Y-%U"))]
# [1] "2002-07-02" "2002-07-09" "2002-07-16" "2002-07-23"
# [5] "2002-07-30" "2002-08-06"

weeks.strings您只需在
weeks.strings
中添加一个工作日,即可使日期明确无误(改编自)

正如评论中所指出的,如果日期跨度很长,则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)

wkstr日期没有周标识符…您能添加您期望的输出吗?Joshua-我有一个与每个周数据点相关的值。我希望能够绘制周与值,因此保留数据作为日期对象对我来说非常重要,以便于打印。预期的输出与原始字符串相同,但是关于类日期。我不关心指定的是一周中的哪一天,只要它是一致的。我只想绘制每周数据的频率。不幸的是,我发现这个方法有一个错误。一个包含周00的字符串,例如“2003-00”应用此函数后返回为NA。虽然可能是第一次出现第0周的错误?@zzk:0周没有问题。
NA
表示2003年第一周没有星期一。请尝试在
paste
命令中使用除1以外的数字。是的,我在发布后遇到了这个问题。问题是我有一个大的l日期列表。在某些年份,一年中的第一周没有星期一,有时一年中的最后一周也没有星期五。因此,无论我使用哪个数字,我最终得到的NAs数量都是相同的。那么你就不能使用Date类,并且周与周之间的日期是等距的。只使用一个数字怎么样,其中整个部分是e年,小数部分是周(一年的分数)?@zzk:你的“周”的范围是多少,00-53?
as.Date(paste(weeks.strings,1),"%Y-%U %u")
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)