Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.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:将ISO周转换为日期时出错_R_As.date - Fatal编程技术网

R:将ISO周转换为日期时出错

R:将ISO周转换为日期时出错,r,as.date,R,As.date,我有一年,一个ISO周和一个工作日(2015年,第7周,工作日1==2015-02-09),我想将其转换为日期 因此,我采用以下方法: date <- "2015:7:1" as.Date(date, format="%Y:%V:%u") [1] "2015-03-25" date问题是您可以使用%V进行输出,但不能进行输入。注: %五: ISO 8601中定义的十进制数(01–53)为一年中的一周。如果包含1月1日的一周(从星期一开始)在新的一年中有四天或更多天,则将其视为第1周。否

我有一年,一个ISO周和一个工作日(2015年,第7周,工作日1==2015-02-09),我想将其转换为日期

因此,我采用以下方法:

date <- "2015:7:1"

as.Date(date, format="%Y:%V:%u")
[1] "2015-03-25"

date问题是您可以使用
%V
进行输出,但不能进行输入。注:

%五: ISO 8601中定义的十进制数(01–53)为一年中的一周。如果包含1月1日的一周(从星期一开始)在新的一年中有四天或更多天,则将其视为第1周。否则,这是上一年的最后一周,下一周是第1周(输入时接受但忽略。)

因此,这意味着您可能应该使用
%W
并减去一周:

as.Date("2015:7:1", format = "%Y:%W:%u") - 7
[1] "2015-02-09"
然后注意如何在输出上允许
%V

strftime(as.Date("2015:7:1", format = "%Y:%W:%u") - 7, "%Y:%V:%u")
[1] "2015:07:1"

我想提醒一下。建议的计算方法并不总是像它应该的那样工作,例如:

isoyear = c(2015, 2015)
isoweek = c(52, 53)
iyw=paste(isoyear,isoweek,1,sep=":")
as.Date(iyw, format = "%Y:%W:%u") - 7
[1] "2015-12-21" NA
但如果我们查看“2015-12-31”的国际标准化组织周,我们会得到以下信息:

isoweek("2015-12-28")
[1] 53

最好使用ISOweek包中的函数ISOweek2date()。

如果您愿意使用
library(lubridate)
解决方案是
ymd(date)
@dimitris\u ps No,这是错误的,ymd(date)得到“2015-07-01 UTC”@dimitris\u ps No,您错过了,第二个数字是ISOweek而不是月份。最后一个数字是工作日,而不是一个月中的某一天。再次使用
lubridate
一个非常难看的解决方案:
date我应该阅读整个手册页;-)谢谢您建议的解决方案正是我目前使用的解决方案。