【问题标题】:Remove outliers from Raster从栅格中删除异常值
【发布时间】:2020-01-14 20:58:22
【问题描述】:

我想知道是否可以从栅格数据集 Data 中删除异常值

> library (raster)
> ras <- raster("08_sa.tif")
> boxplot(ras)
> summary(ras)
            08_sa.tif
Min.    -6.010734e+17
1st Qu. -4.292327e+15
Median   3.456345e+15
3rd Qu.  5.913508e+15
Max.     3.954778e+17
NA's     0.000000e+00

> dput(ras)
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
    ), offset = 0, gain = 1, inmemory = TRUE, fromdisk = FALSE, 
        isfactor = FALSE, attributes = list(), haveminmax = TRUE, 
        min = 213381595136, max = 395477771117133824, band = 1L, 
        unit = "", names = "Data"), legend = new(".RasterLegend", 
        type = character(0), values = logical(0), color = logical(0), 
        names = logical(0), colortable = logical(0)), title = character(0), 
    extent = new("Extent", xmin = 60.514678955, xmax = 97.416931152, 
        ymin = -0.701358795, ymax = 38.49804306), rotated = FALSE, 
    rotation = new(".Rotation", geotrans = numeric(0), transfun = function () 
    NULL), ncols = 369L, nrows = 392L, crs = new("CRS", projargs = "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"), 
    history = list(), z = list())

> as.data.frame(ras,xy=TRUE) -> df.ras
> colnames(df.ras) <- c("x","y","value")
> df.ras$value[!df.ras$value %in% boxplot.stats(df.ras$value)$out] -> no.outliner
> boxplot(no.outliner)
> plot(no.outliner)
> summary(no.outliner)
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max.      NA's 
2.134e+11 3.315e+15 5.084e+15 4.936e+15 6.538e+15 1.145e+16    113153 

没有异常值'no.outlier'已经失去了它的地理位置 去除异常值之前的“ras”图

【问题讨论】:

  • 你能发布 08_sa.tif 吗?
  • 贴在链接数据中
  • 下载数据的链接不是好的做法。如果可能,请使用dput,或生成一个小型测试数据集来重现您的问题/问题
  • @val 是测试数据集,大小仅为 234 kb。使用 dput 更新问题。
  • @Dipu 这与大小无关,只是让人们可以轻松(且安全)地帮助您。顺便说一句,请发布dput(ras) 而不是dput(ras[1:10, 1:10]) 的输出

标签: r raster boxplot outliers


【解决方案1】:

我查看直方图和箱线图,注意异常值范围并使用重新分类删除。再次感谢@val,您的重新分类提示值得 r。

> x1 <- reclassify(ras, cbind(1.5e+16,Inf, NA), right=FALSE) 
> spplot(x1)
> boxplot(x1)
> hist(x1)

【讨论】:

    【解决方案2】:

    试试这个:

    # load package raster
    library(raster)
    
    # load your data
    ras <- raster("08_sa.tif")
    
    # make a df
    as.data.frame(ras,xy=TRUE) -> df.ras
    
    # adjust col names
    colnames(df.ras) <- c("x","y","value")
    
    # remove outliner
    df.ras$value[!df.ras$value %in% boxplot.stats(df.ras$value)$out] -> no.outliner
    
    # draw boxplot without outliner 
    boxplot(no.outliner)
    

    【讨论】:

    • 我认为它删除了异常值但失去了地理位置
    猜你喜欢
    • 2013-04-08
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 2016-08-20
    • 2019-09-23
    相关资源
    最近更新 更多