R语言 na.omite()不会从数据中删除NA

edqdpe6u  于 2023-03-10  发布在  其他
关注(0)|答案(1)|浏览(155)

我试图从R studio上的.tiffMap文件中提取一个框的值,并计算每个框的平均值。每个框都产生了NA,我需要删除这些NA才能计算平均值。
我已经加载了tiff文件,设置了最小值和最大值,并绘制了Map:

DEM <- raster("del15N_130_raster.tif")

DEM<- setMinMax(DEM)

plot(DEM)

然后,我需要在Map上添加一个框,并通过以下方式从框中提取值

AntC <- read_sf("shp/Antartica_typeC.shp")
# Plot the raster with the shape file box
plot(AntC, add = T)
# get mean values from shape
vals <- terra::extract(DEM, AntC, na.rm=TRUE )
vals_mean <- mean(vals$layer)

由于存在从Map值生成的NA,因此收到错误

Warning message:
In mean.default(vals$layer) :
  argument is not numeric or logical: returning NA

我已尝试以下选项

na.omit(DEM)
vals_mean <- mean(vals$layer, na.rm=TRUE))
vals<-vals[!is.na(vals)]
meanvals <- terra::extract(
  DEM, 
  AntC, 
  fun="mean", na.rm=TRUE
)

我在“vals”中仍有NA,但仍收到相同的错误

wtzytmuj

wtzytmuj1#

你能做到

vals_mean <- terra::extract(DEM, AntC, fun=mean, na.rm=TRUE)

如果仍存在NA,则可能是因为面(框)位于栅格之外,或者面(框)非常小。在后一种情况下,可使用以下方法解决问题

vals_mean <- terra::extract(DEM, AntC, fun=mean, na.rm=TRUE, exact=TRUE)

相关问题