2016-11-07 133 views
-2

我想网格中的数据帧相关的所有点在网格框只有在点的数量超过10个。我可以做平均,并与Rasterise:结合平均值和计数

 pts <- tmp[,c("lon","lat","z")] 
     coordinates(pts) <- ~ lon+lat 
     r <- raster(ncol = 8, nrow = 3) 
     extent(r) <- extent(pts) 

     tmp_mean <- as.matrix(rasterize(pts, r, pts$sst, fun = mean)) 
     tmp_count <- as.matrix(rasterize(pts, r, pts$sst, fun = 'count')) 
单独算分

,但我发现,以限制对每个网格单元中观察数均值的唯一方法是使用一个for循环

 for(k in 1:3){ 
      for(l in 1:8) tmp_mean[k,l] <- ifelse(tmp_count[k,l] < 10, NA,tmp_mean[k,l]) 
     } 

感谢

+0

的最小工作示例将帮助dput()... –

+0

检查它可以告诉你所需的输出 – Megatron

回答

0

你可以试试简单的索引。事情是这样的

tmp_mean[tmp_count < 10] <- NA 
+0

@Serban Tanasa,谢谢。 – Istrel

0

缺乏从OP我提供基于mtcars,而不是data.table例如最小重复的例子。

#Set up example: 
library(data.table) 
mydat <- data.table(mtcars) 
setkey(mydat, carb, gear) 

现在它是一个简单的操作data.table: 下面的调用仅返回其中存在至少3个观察值的carb给定的组合和gear

mydat <- mydat[,count:=.N, by=.(carb, gear)][count>3,] 

随着在不具有数据值数据集中至少有3个观测值,现在可以执行mean()操作。下面,其他所有列的方式进行计算,由carbgear在分组

mydat[,lapply(.SD, mean), by=.(carb, gear)][,count := NA] 

结果:

carb gear mpg cyl disp hp drat  wt qsec vs am 
1: 1 4 29.10 4 84.20 72.5 4.0575 2.07250 19.220 1.0 1.0 
2: 2 3 17.15 8 345.50 162.5 3.0350 3.56000 17.060 0.0 0.0 
3: 2 4 24.75 4 121.05 79.5 4.1625 2.68375 20.005 1.0 0.5 
4: 4 3 12.62 8 416.40 228.0 3.2200 4.68580 16.894 0.0 0.0 
5: 4 4 19.75 6 163.80 116.5 3.9100 3.09375 17.670 0.5 0.5 
0

你可以做光栅化命令中的全部操作,通过扩展函数的定义。我发明了一个数据文件来演示它

pts<-data.frame(lon=c(52,52,52,53,54), 
       lat=c(3,3,3,4,5), 
       z=c(1.1,2.9,3.2,4.0,5.1)) 
coordinates(pts) <- ~ lon+lat 
r <- raster(ncol = 8, nrow = 3) 
extent(r) <- extent(pts) 
tt<-rasterize(pts,r,field="z", 
       fun=function(x,...)ifelse(length(x)>2,mean(x),NA)) 

这可以一次给你想要的光栅。通过

ttm<-as.matrix(tt) 
ttm 

这将产生

 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] 
[1,] NA NA NA NA NA NA NA NA 
[2,] NA NA NA NA NA NA NA NA 
[3,] 2.4 NA NA NA NA NA NA NA