如何在r中的可重现数据中生成NA

时间:2013-11-11 15:06:36

标签: r r-raster

library(raster)  
r <- raster(nrow=5, ncol=5)  
s <- stack( sapply(1:5, function(i) setValues(r, rnorm(ncell(r), i, 3))))  

将生成在每个像素中都有值的rasterstack

如何生成包含rasterstack值的NA

2 个答案:

答案 0 :(得分:3)

我读到的问题是,您希望在NA中引入一些rasterStack值,而不是每个值。此函数对指定分布中的随机法线进行采样,但也可以在给定指定概率的情况下对NA进行采样(在函数中设置p1以获取所有NA)...

na_ras <- function( r , p , nl ){
  n <- ncell( r ) - 1  
  s <- stack( sapply( seq_len( nl ) , function(i) setValues( r ,  sample( c( NA , rnorm( n , i , 3 ) ) , prob = c( p , rep( (1-p) / n , n ) ) , replace = TRUE ) ) ) )
  return( s )
}

set.seed(1)
#  10% chance of NA being introduced
out <- na_ras( r , 0.1 , 5 )
out[[1]][]
 [1]  3.83150863  0.95142921  2.16952971  3.34640890  5.53534351  1.98852332
 [7]          NA          NA  2.46228716 -0.86372174  0.86519917  0.08383484
[13]  1.22369495  2.46228716  5.53534351  3.21497412  0.86519917 -1.46140515
[19]  2.16952971  3.46366359          NA  3.34640890  3.21497412  3.75693211
[25]  3.21497412

set.seed(1)
#  80% chance of NA being introduced
out <- na_ras( r , 0.8 , 5 )[[1]][]
out
 [1]        NA        NA        NA  2.727344        NA        NA        NA
 [8]        NA        NA        NA        NA        NA -1.506886        NA
[15]        NA        NA        NA        NA        NA        NA        NA
[22]  5.535344        NA -1.461405        NA

如果您只想制作所有NA的筹码,只需使用[方法stack ....

r[] <- NA
stack( r , r , r , r , r  )
#class       : RasterStack 
#dimensions  : 5, 5, 25, 5  (nrow, ncol, ncell, nlayers)
#resolution  : 72, 36  (x, y)
#extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#coord. ref. : +proj=longlat +datum=WGS84 
#names       : layer.1, layer.2, layer.3, layer.4, layer.5 
#min values  :      NA,      NA,      NA,      NA,      NA 
#max values  :      NA,      NA,      NA,      NA,      NA 

答案 1 :(得分:1)

使用rep(NA,ncell(r))而不是rnorm

s <- stack( sapply(1:5, function(i) setValues(r,     rep(NA,ncell(r)) )) ) 
s
class       : RasterStack 
dimensions  : 5, 5, 25, 5  (nrow, ncol, ncell, nlayers)
resolution  : 72, 36  (x, y)
extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 
names       : layer.1, layer.2, layer.3, layer.4, layer.5 
min values  :      NA,      NA,      NA,      NA,      NA 
max values  :      NA,      NA,      NA,      NA,      NA