如何在R语言中将MODIS影像的DOY转换为正确日期?
解决MODIS NDVI时间序列数据的日期提取错误问题
你的问题出在只提取了日序部分,完全忽略了文件名中的年份信息。从文件名示例能看到,doy后面是YYYYDDD格式(4位年份+3位年积日),但你原来的代码只截取了后3位(年积日),然后基于1999-12-31累加天数,自然所有日期都落在2000年。
修正方案(两种可选)
方案1:用正则表达式提取完整日期字符串(推荐)
借助stringr包的正则匹配,精准提取doy后的7位数字(年份+年积日),再用as.Date解析:
# 安装并加载stringr包(如果没装过) install.packages("stringr") library(stringr) # 仅列出tif文件(避免其他干扰) files <- list.files(pattern = "\\.tif$") # 提取doy后面的YYYYDDD格式字符串 date_str <- str_extract(files, "(?<=doy)\\d{7}") # 转换为日期格式:%Y是4位年份,%j是3位年积日 dates <- as.Date(date_str, format = "%Y%j") # 生成数据框 time_df <- data.frame(Date = dates)
方案2:调整substr截取范围
如果你不想用额外包,直接调整substr的起止位置,截取doy后的全部7位数字:
files <- list.files(pattern = "\\.tif$") # 截取doy后的7位数字(对应文件名中39-45位,匹配你的文件名结构) date_str <- substr(files, 39, 45) # 转换为日期格式 dates <- as.Date(date_str, format = "%Y%j") time_df <- data.frame(Date = dates)
验证结果
运行后查看time_df,第六个文件对应的日期应该是2001年第113天(即2001-04-22),年份显示正确。
内容的提问来源于stack exchange,提问作者isabel_wa
相关产品推荐
相关产品推荐

