1
votes

Convertir un raster projeté en csv en conservant sa forme de grille d'origine

Je dois convertir certains rasters projetés (avec des valeurs ndvi) en fichiers csv ou excel. Je veux conserver la forme de la grille, avec la première ligne en tant que valeurs métriques lon et la première colonne en tant que valeurs lat métriques. À l'intersection, il devrait y avoir la valeur ndvi.

J'utilise généralement 'as.data.frame (raster, xy = T)' pour exporter des valeurs sous forme de bloc de données, mais dans ce cas précis, j'obtiendrais une sorte de matrice de valeurs.

  1   2   
1 v1  v2
2 v3  v4

Ce que je veux

library(raster)
r <- raster(ncol=10, nrow=10)
ncell(r)
values(r) <- 1:ncell(r)
plot(r)

df <- as.data.frame(r, xy=T)
head(df)

    x  y layer
1 -162 81     1
2 -126 81     2
3  -90 81     3
4  -54 81     4
5  -18 81     5
6   18 81     6

Un alors, écris.csv ...


4 commentaires

Pas clair sur la sortie. Comment voulez-vous que la tête (df) soit


La sortie doit être une trame de données


Je voulais dire ce que ces valeurs v1, v2, v3, v4


ok, ce sont les valeurs ndvi présentes dans le raster d'origine


3 Réponses :


1
votes

J'ai trouvé une solution en passant de 'as.data.frame' à 'dcast'

df <- as.data.frame(raster, xy=T)
d1 <- dcast(df, y~x, value.var = "layer")
d2 <- d1 %>% arrange(-y)

Pas élégant, mais fonctionne. D'autres méthodes?


0 commentaires

0
votes

Si nous avons besoin d'une approche tidyverse

xtabs(layer ~ y + x, transform(df, y = factor(y, 
                 levels = sort(unique(y), decreasing = TRUE))))

Ou avec base R

library(tidyerse)
df %>%
   spread(x, layer) %>% 
   arrange(desc(y))


0 commentaires

1
votes

Vous pouvez utiliser as.matrix pour cela.

mm <- matrix(values(r), ncol=ncol(r), byrow=TRUE)

Vous pouvez également créer la matrice comme ceci

library(raster)
r <- raster(ncol=10, nrow=10)
values(r) <- 1:ncell(r)

m <- as.matrix(r)
write.csv(m, "test.csv", row.names=F)

read.csv("test.csv")
#   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
#1   1  2  3  4  5  6  7  8  9  10
#2  11 12 13 14 15 16 17 18 19  20
#3  21 22 23 24 25 26 27 28 29  30
#4  31 32 33 34 35 36 37 38 39  40
#5  41 42 43 44 45 46 47 48 49  50
#6  51 52 53 54 55 56 57 58 59  60
#7  61 62 63 64 65 66 67 68 69  70
#8  71 72 73 74 75 76 77 78 79  80
#9  81 82 83 84 85 86 87 88 89  90
#10 91 92 93 94 95 96 97 98 99 100


0 commentaires