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 使用具有多个条件的函数聚合光栅_R - Fatal编程技术网

R 使用具有多个条件的函数聚合光栅

R 使用具有多个条件的函数聚合光栅,r,R,我正在尝试使用具有多个条件的专用函数聚合光栅。我被“if-else”的语法迷住了,想知道是否有人能帮忙 以下是我在agg.fun中尝试做的事情: 将所有NA值设置为-9999 小于或等于100,或大于等于10的值取平均值 大于100的值,如果它们是聚合单元格的30%或更多,则将值设置为-9999;如果小于,则将值设置为缺失分数的加权平均值(-9999) 还有什么是-9999吗 agg.fun <- function(x) { if (max(x) == NA) { retu

我正在尝试使用具有多个条件的专用函数聚合光栅。我被“if-else”的语法迷住了,想知道是否有人能帮忙

以下是我在agg.fun中尝试做的事情:

  • 将所有NA值设置为-9999
  • 小于或等于100,或大于等于10的值取平均值
  • 大于100的值,如果它们是聚合单元格的30%或更多,则将值设置为-9999;如果小于,则将值设置为缺失分数的加权平均值(-9999)
  • 还有什么是-9999吗

    agg.fun <- function(x) {
        if (max(x) == NA) {
        return(-9999)
        } else if (max(x) <= 100 && max(x) > 10) {
        return(mean(x))
        } else if (max(x) <= 10)) {
        return(0)
        } else if (max(x) > 100) {
            cloud.count <- length(which(x==250))
            cloud.per <- cloud.count/(ncol(x)*nrow(x))
                if (cloud.per >= 0.3) {
                return(-9999)
                } else (cloud.per < 0.3) {
                return(mean(x) + cloud.count * 0.5)
               }
        } else {
        return(-9999)
        }
    }
    
    
    r <- raster(matrix(rep(c(1:100),100),100,100))
    
    #randomly set some values to 250
    r[sampleRandom(r,1000,cells=TRUE)[,'cell']] <- 250
    
    #randomly set some values to 200  
    r[sampleRandom(r,100,cells=TRUE)[,'cell']] <- 200
    
    #set some values in raster to NA
    r[r%in%c(200,201,211,225,237,239,254,255)] <- NA
    
    #attempt to run aggregate (doesn't work right now)
    r.agg <- aggregate(r, fact=3, fun=agg.fun, expand=TRUE, na.rm=TRUE)
    

    agg.fun我想你在寻找这样的东西:

    agg.fun <- function(x,...) { ## you should add ... for na.rm,and other extra parameters
      x[is.na(x)] <- -9999
      if (all(x  <= 100 & x > 10))return(mean(x))
      else{
        len_100= sum(x>100)
        len_missing = sum(x==-9999)
        if(len_100 < 0.3*length(x))
          return(mean(x)+ 0.5*len_missing)
      }
      return(-9999)
    }
    
    agg.fun 100小于总值的三分之一返回由缺失值加权的平均值
  • 在所有其他情况下返回-9999

  • 这太棒了!非常感谢。