我必须将一些投影栅格(带有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 ...
我找到了一个从'as.data.frame'传递到'dcast'的解决方案
df <- as.data.frame(raster, xy=T)
d1 <- dcast(df, y~x, value.var = "layer")
d2 <- d1 %>% arrange(-y)
不优雅,但有效。还有其他方法吗?
你可以使用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)
如果我们需要一个整齐的方法
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))))