我必须将一些投影栅格(具有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 ...
答案 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))))