2013-02-22 5 views
2

J'ai deux fichiers binaires (raster) avec les mêmes dimensions: le premier représente la corrélation entre 2 données et le second représente la carte de couverture terrestre avec 10 classes. Je veux prendre la moyenne de mes corrélations basées sur les classes de couverture terrestre. Donc, finalement, nous aurons une carte comme la carte de la couverture terrestre, mais avec des moyennes de corrélations au lieu des nombres de classes.Comment calculer les moyennes d'une variable dans un fichier binaire basé sur des classes dans un autre fichier binaire?

Voici les deux fichiers:

1- to read the first file correlation map: 

    conne <- file("C:\\corr.bin","rb") 
    corr<- readBin(conne, numeric(), size=4, n=1440*720, signed=TRUE) 
    y<-t(matrix((data=corr), ncol=720, nrow=1440)) 
    r = raster(y) 

2- Pour lire la deuxième carte de la couverture terrestre de fichier:

conne <- file("C:\\land cover.bin","rb") 
    over<- readBin(conne, integer(), size=1, n=1440*720, signed=F) 
    y1<-t(matrix((data=over), ncol=720, nrow=1440)) 
    r1 = raster(y1) 

3-écrire les résultats:

 to.write = file(paste("/orcomplete.bin",sep=""),"wb") 
    writeBin(as.double(results), to.write, size = 4) 

Répondre

1

Wouldn ce n'est juste que quelque chose comme:

tapply(y, y1, mean, na.rm=TRUE) 

Si vous voulez que la classe moyenne associée à la même disposition que les matrices d'entrée font alors ceci:

outmat <- matrix(ave(y, y1, FUN=mean, na.rm=TRUE), nrow(y), ncol(y)) 
+1

Je suis surpris que vous ayez un fichier aussi volumineux. (Et aussi surpris que vous pensiez que ce serait encore plus grand.) Vous avez dit que «y1» n'avait que 10 classes. J'aurais prédit que vous obtiendriez seulement un vecteur de longueur 10. À quoi ressemble la tête (résultat)? –

+0

Si vous voulez que la classe signifie être répliquée dans le même arrangement que les données, alors je le ferais différemment. Modification ci-dessus. –

+0

Je ne comprends pas ce que vous suggérez. –

1

Si la trame landcover a des caractéristiques géo-référencement vous souhaitez conserver (par exemple, des informations de projection) , vous pouvez utiliser l'outil zonale de la boîte à outils de trame:

corr_raster <- raster('correlation raster filename') 
land_raster <- raster('landcover raster filename') 
zv <- zonal(corr_raster , land_raster, fun=mean) 

Alors tout ce que vous avez à faire est d'assigner aux valeurs moyennes de la table résultant des pixels de couverture végétale. Le paquet raster a beaucoup de méthodes de substitution pour le faire (par exemple, reclassifier la fonction).

Questions connexes