r - 将栅格转换为数据框并在 R 中提取所需的值
问题描述
我想使用 ggplot2 制作水深图。我将栅格文件转换为数据框,裁剪并将其转换为数据框:
library(raster)
##Import a raster file
Bathymetry_dat <- raster("w001000.adf")
##Clop the raster file
Bathy_clopped <- crop(Bathymetry_dat, extent(84.11236, 108.4594, -4.046979, 24.09534))
##Convert it to a dataframe
datframe_bathy<-as.data.frame(Bathy_clopped, xy = TRUE)
然后,我检查了数据框中的值(即深度,以 m 为单位):
> summary(datframe_bathy)
x y w001000_COUNT
Min. : 84.11 Min. :-4.046 Min. : 9945
1st Qu.: 90.20 1st Qu.: 2.987 1st Qu.: 81618
Median : 96.28 Median :10.021 Median : 168447
Mean : 96.28 Mean :10.021 Mean : 210212
3rd Qu.:102.37 3rd Qu.:17.054 3rd Qu.: 336718
Max. :108.45 Max. :24.087 Max. :1205362
NA's :3449125
深度 (m) 值应该是负数,不应该这么大。然后,我检查了在 R 中导入的测深文件。
> Bathy_clopped
class : RasterLayer
dimensions : 3377, 2922, 9867594 (nrow, ncol, ncell)
resolution : 0.008333333, 0.008333333 (x, y)
extent : 84.10833, 108.4583, -4.05, 24.09167 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
data source : in memory
names : w001000
values : -6138, -1 (min, max)
attributes :
ID COUNT
from: -11584 1
to : -1 676804
有两个属性:ID 和 COUNT。我想 ID 是深度(m)并且不知道 COUNT 是什么。奇怪的是 COUNT 的范围从 1 到 676804,但 summary() 显示的值从 9945 到 1205362。
所以我的问题是如何将栅格文件转换为包含我想要的值的数据框?
使用“COUNT”值,我能够生成测深图,但图例中的值不正确..
提前致谢。
解决方案
您的栅格图层有一个属性表。我们可以用来levels
访问它。
library(raster)
# See the attribute table
head(levels(Bathy_clopped)[[1]])
# ID COUNT
# 1 -11584 1
# 2 -10944 1
# 3 -10907 1
# 4 -10900 1
# 5 -10879 1
# 6 -10878 1
然后我们可以操作这个属性表,替换COUNT
为深度,即ID
.
# Get the attribute table
RAT <- levels(Bathy_clopped)[[1]]
# Replace COUNT with ID
RAT$Depth <- RAT$ID
RAT$COUNT <- NULL
# Replace the attribute table
Bathy_clopped2 <- Bathy_clopped
levels(Bathy_clopped2)[[1]] <- RAT
# Create a single layer based on the new RAT
Bathy_clopped2 <- deratify(Bathy_clopped2)
# Create a data frame
datframe_bathy2 <-as.data.frame(Bathy_clopped2, xy = TRUE)
现在中的值datframe_bathy2
符合预期。
# Summarize the data frame
summary(datframe_bathy2)
# x y COUNT
# Min. : 84.11 Min. :-4.046 Min. :-6138
# 1st Qu.: 90.20 1st Qu.: 2.987 1st Qu.:-3800
# Median : 96.28 Median :10.021 Median :-2428
# Mean : 96.28 Mean :10.021 Mean :-2154
# 3rd Qu.:102.37 3rd Qu.:17.054 3rd Qu.: -65
# Max. :108.45 Max. :24.087 Max. : -1
# NA's :3449125
推荐阅读
- javascript - # 在点击 link_to_add 或 link_to_remove_association 时添加到 URL
- r - 如何从 glmnet 创建的系数和选定特征创建此函数
- html - 为什么菜单 ul 不扩展以适合右对齐子菜单项?
- python - 使用 Pandas 数据框和 groupby 将坐标正确格式化为 JSON bbox 边界列表
- javascript - 巧克力js从链接attr href打开图像
- reactjs - 从帖子中删除评论:评论不会删除或错误的评论被删除,commentId undefined
- ansible - ansible jinja2 - if elseif - 使用相同的行
- typescript - 将reduce与map和array一起使用
- python - 在 django 模板中显示 PIL 图像对象
- react-native - 无法验证自定义博览会客户的身份