如何导出SPEI计算结果为.xlsx?核心值缺失问题求助
问题分析与解决方案
问题出在你将spei1$fitted转换为data.frame后赋值给spei$values,导致该列是嵌套的data.frame结构,write_xlsx无法正确识别并展开这类嵌套列,最终导出的Excel中缺失SPEI值。
修改后的代码
# 计算PET与气候水平衡 spei$pet <- hargreaves(Tmin = spei$tmin, Tmax = spei$tmax, lat = 51.411843) cwbal <- spei$precip - spei$pet # 计算1尺度SPEI spei1 <- spei(cwbal, scale = 1) # 将SPEI拟合值转换为普通向量,直接添加到原数据框 spei$spei_values <- as.vector(spei1$fitted) # 可选:验证行数匹配(确保时间序列无错位) if (nrow(spei) != length(spei1$fitted)) { warning("原数据框行数与SPEI值长度不匹配,请检查时间序列对齐情况") } # 导出到Excel write_xlsx(spei, "spei_df.xlsx")
关键说明
spei1$fitted是时间序列(ts)对象,as.vector()会剥离其时间索引,提取纯数值向量,直接赋值给原数据框的新列,避免嵌套结构。- 如果需要保留SPEI的时间索引用于验证,可额外添加以下代码:
# 提取SPEI的时间索引并转为日期格式 spei$spei_date <- as.Date(time(spei1$fitted))
内容的提问来源于stack exchange,提问作者Andrea Robinson
相关产品推荐
相关产品推荐

