【发布时间】:2023-03-16 09:56:01
【问题描述】:
我遇到了计算和运行降水变异系数滞后的 for 循环问题。我不太确定如何概括这个问题,所以我添加了到目前为止我已经采取的所有步骤。
我的主要数据集“d”如下所示:
row.names timestamp station year month ndvi landcover altitude precipitation
1 1 1 A 2000 jan 0.4138 Mixed forest 2143 16.0
2 1769 2 A 2000 feb 0.4396 Mixed forest 2143 4.0
我想找出降水变异系数滞后 0:10 对每个站点一年的最大 ndvi 的影响。 基本上我的代码如下所示:
r <- aggr(d,c("station","landcover","year"), c("altitude=mean(altitude)","max.ndvi=NA","max.month=NA","max.timestamp=NA","max.precipitation=NA", "cv=NA"))
head(r)
station landcover year altitude max.ndvi max.month max.timestamp max.precipitation cv
1 A Mixed forest 2000 2143 NA NA NA NA NA
2 A Mixed forest 2001 2143 NA NA NA NA NA
for(i in 1:nrow(r)) {
tmp <- d[d$station==r$station[i] & d$year==r$year[i],]
idx <- which.max(tmp$ndvi);
r$max.month[i] <- as.character(tmp$month[idx]);
r$max.ndvi[i] <- tmp$ndvi[idx];
r$max.timestamp[i] <- tmp$timestamp[idx];
r$max.precipitation[i] <- tmp$precipitation[idx];
r$cv[i] <- sd(tmp$precipitation, na.rm = TRUE)/mean(tmp$precipitation, na.rm = TRUE)
}
for(lag in 0:10) {
cat("\n\n***** lag =",lag,"*****\n\n");
for(i in 1:nrow(r)) {
timestamp <- r$max.timestamp[i]-lag;
if(timestamp>0){
r$cv[i] <- r$cv[d$station==r$station[i] & d$timestamp==timestamp];
}
}
r <- na.omit(r)
print(summary(aov(max.ndvi~cv, data=r)));
for(lu in sort(unique(as.character(r$landcover)))) {
cat("\n----------------- Analysis for LU =",lu,"\n\n");
print(summary(aov(max.ndvi~cv,data=r[r$landcover==lu,])));
}
}
我遇到的问题是最后一部分为每个 max.ndvi 值分配/循环滞后。我想要所有行的每个滞后的摘要以及每种土地覆盖类型的摘要。
我尝试了各种不同的组合,但总是出错。对于上面的代码,我得到了这个错误:
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
0 (non-NA) cases
谁能给点建议?
非常感谢。
【问题讨论】:
-
由于这更像是一个调试问题,您还可以查看“代码审查”堆栈交换站点codereview.stackexchange.com/about
-
感谢@Kevin 提供的信息,我也刚刚发布了。
-
显然它被认为是代码审查的“离题”。如果有其他人可以提供帮助,我将不胜感激!
-
我认为您有一个“滞后列”,其中包含至少一个土地覆盖类的所有 NA。