将投影栅格转换为保持其原始网格形式的csv

问题描述 投票:1回答:3

我必须将一些投影栅格(带有ndvi值)转换为csv或excel文件。我想保留网格形式,第一行为公制值,第一列为公制转值。在十字路口应该有ndvi值。

我通常使用'as.data.frame(raster,xy = T)'将值导出为数据帧,但在这种精确的情况下,我将获得一种值矩阵。

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

我想要的是


  1   2   
1 v1  v2
2 v3  v4

然后,write.csv ...

r raster r-raster
3个回答
1
投票

我找到了一个从'as.data.frame'传递到'dcast'的解决方案

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

不优雅,但有效。还有其他方法吗?


1
投票

你可以使用as.matrix

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

您也可以像这样创建矩阵

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

0
投票

如果我们需要一个整齐的方法

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

或者与base R

xtabs(layer ~ y + x, transform(df, y = factor(y, 
                 levels = sort(unique(y), decreasing = TRUE))))
© www.soinside.com 2019 - 2024. All rights reserved.