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

时间:2019-04-19 08:00:47

标签: r raster r-raster

我必须将一些投影栅格(具有ndvi值)转换为csv或excel文件。我想保留网格形式,第一行作为公制lon值,第一列作为公制lat值。在交叉点处应该有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

然后,写.csv ...

3 个答案:

答案 0 :(得分: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 :(得分: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)

答案 2 :(得分: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))))