r - 将 .byte 文件读入 R
问题描述
来自该来源的网格化每日近地表风速数据具有.byt
我不熟悉的文件扩展名。
我正在尝试将这些数据读入 R 进行分析,因此想通过纬度和经度来询问它。
我试图将其导入 R 并通过终端浏览数据,但似乎无法找到将完整数据集导入 R 并随后转换为有用格式的方法。
到目前为止,我有以下内容:
to.read = file("~/Near-Surface_Wind_Speed/mcvicar_etal_grl2008/5km/2018/Aust_Wind_5km_20180101_V2.byt", "rb")
readBin(to.read, integer(), n=5, size=2, endian = "little")
但这只给了我 5 个值,没有元数据(即变量名或坐标)
由于我使用的是 mac,然后我打开终端并尝试了以下命令:
od -t x1 Aust_Wind_5km_20180101_V2.byt
它返回了更大的数据图,这里给出了其中的一个子集:
0000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
0001740 ff ff ff ff ff ff ff ff ff ff 0b 0b 0b 0c 0c 0c
0001760 0c 0c 0c 0c 0c 0c 0c 0c 0c 0d ff ff ff ff ff ff
0002000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
0002060 ff 11 ff ff 11 10 10 10 10 11 11 11 11 11 11 11
0002100 11 11 11 12 ff ff ff ff ff ff ff ff ff ff ff ff
0002120 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
0002660 ff ff 19 ff ff ff ff ff ff ff ff ff ff ff ff ff
0002700 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
0003020 ff ff ff 19 18 18 19 14 13 13 13 13 13 13 13 13
0003040 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14 14
0003060 14 14 14 14 14 14 14 14 14 14 14 14 14 14 15 19
0003100 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0003120 ff ff ff ff 1a 14 15 15 15 15 18 ff ff ff ff ff
0003140 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
0003460 ff ff ff 0c 0a 08 08 08 08 08 08 08 08 08 08 08
0003500 09 0c 0e ff ff ff ff ff ff ff ff ff ff ff ff ff
0003520 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
0003560 ff ff ff ff ff ff ff ff ff ff ff ff ff 11 10 0b
0003600 0b 0b 0b 0b 0c 0c 0c 0d 0d 0d 0d 11 12 ff ff ff
0003620 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
0004340 ff ff ff ff ff ff ff ff ff ff ff ff 19 15 ff ff
0004360 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
0004520 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 19
0004540 ff 15 12 12 15 19 19 17 14 10 0d 0d 0d 0e 0e 10
0004560 13 0f 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e
0004600 0e 0e 0e 0e 0f 0f 0f 0f 13 17 18 18 19 ff ff ff
0004620 ff ff ff ff ff ff ff ff ff ff ff ff ff 1a 18 16
0004640 15 12 14 1a ff ff ff ff ff ff ff ff ff ff ff ff
0004660 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
0005160 ff ff ff ff ff ff ff ff ff ff ff ff ff 0c 0b 08
0005200 07 07 07 07 06 08 09 08 09 0b 0e ff ff ff ff ff
0005220 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
0005300 11 ff ff ff ff 11 10 0d 09 08 08 0a 0d 11 11 12
0005320 12 12 12 12 12 ff ff ff ff ff ff ff ff ff ff ff
0005340 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
0006060 ff ff ff ff ff 19 15 ff 19 19 ff ff ff ff ff ff
0006100 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
0006240 ff ff ff ff ff ff ff ff ff ff 19 19 19 ff ff ff
0006260 ff ff 15 11 11 13 15 13 17 19 14 0e 0e 0e 11 0f
0006300 0e 0e 0e 10 13 13 13 13 13 13 13 13 13 13 13 13
0006320 10 0f 0f 10 10 14 14 17 1a ff ff ff ff ff ff ff
0006340 ff ff ff ff ff ff ff ff ff ff 1a 17 ff ff ff ff
0006360 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
0006700 ff ff ff ff ff ff ff 0d 0b 0b 0a 0a 09 09 0b 0d
0006720 0c 0d 0e ff ff ff ff ff ff ff ff ff ff ff ff ff
0006740 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
0007000 ff ff ff ff ff ff ff ff 11 11 11 11 11 10 0e 0c
0007020 0a 09 09 0b 0d 11 12 ff ff ff ff ff ff ff ff ff
0007040 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
0007600 19 12 15 ff ff ff ff ff ff ff ff ff ff ff ff ff
0007620 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
0007760 ff ff ff ff ff ff ff ff ff ff ff ff 19 19 19 ff
0010000 ff ff ff 16 13 13 11 0e 10 11 14 12 0f 0e 0f 0e
0010020 0e 10 13 15 14 14 13 15 18 17 14 11 11 10 0f 0f
0010040 10 15 1a ff ff 1a ff ff ff ff ff ff ff ff ff ff
0010060 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
0010420 ff 0d 0d 0d 0d 0d 0c 0d ff 0e ff ff ff ff ff ff
0010440 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
0010520 11 11 ff 11 10 0c 0b 0a 09 09 0b 0e 10 11 12 ff
0010540 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
0011300 ff ff ff ff ff ff ff ff ff ff 19 ff ff ff ff ff
0011320 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
0011500 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 18
0011520 15 18 1a ff 1a 17 13 11 14 12 0f 0f 0f 0f 0e 0e
0011540 0f 11 13 16 18 17 16 13 13 0f 10 13 14 14 14 17
0011560 16 ff ff ff ff 1a 1a ff ff ff ff ff ff ff ff ff
0011600 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
由于这种数据类型对我来说非常新,因此很难产生可重复的问题。对此效果的任何评论都非常受欢迎...@VincentGuillemot 在下面的评论中将我引导至显示以下信息的元数据文件:
clc; clear all;
% Lower left = 112.000, -44.000 [111.975, -44.025]
% Upper right = 154.000, -10.000 [154.025, -9.975]
% Number of columns = 841
% Number of rows = 681
rows=681; cols=841;
filename = 'Aust_Wind_5km_20110528_V2.byt';
M = memmapfile(filename,'Format',{'uint8',[cols rows],'x'});
a=M.Data.x;
a = a./15.875;
A=flipud(rot90(a));
imagesc(A);
看起来这可能有助于确定要读入 R 中每一行/列的项目数。
解决方案
当我努力寻找答案时,我想我会为上述数据集发布我的解决方案。
使用@Vincent Guillemot 指出的元数据文件中提供的信息,我们可以看到有 841 行和 681 列具有给定的纬度和经度边界。
所以我们可以使用readBin
where来读取它n=(681*841)
。
to.read = file("~/Dropbox/DataSets/Near-Surface_Wind_Speed/mcvicar_etal_grl2008/5km/2018/Aust_Wind_5km_20180101_V2.byt", "rb")
wind <- readBin(to.read, integer(),n=(681*841),size=1,endian="little")
close(to.read)
然后使用data.table
包来提高速度,我们可以给表格一个纬度和长列,然后使用ggplot2
library(data.table)
library(ggplot2)
windDT <- as.data.table(wind)
windDT$longitude <- rep(seq(112,154,by=0.05),681)
windDT$latitude <- rep(seq(-10,-44,by=-0.05),each=841)
windDT[wind < 0]$wind = NA
ggplot(windDT,aes(longitude,latitude))+
geom_raster(aes(fill=wind))+
scale_fill_continuous(na.value="transparent")+
coord_fixed(ratio = 1)+
theme_bw()
推荐阅读
- ruby-on-rails - 如何为一个项目拥有多个 Gemfile?
- matlab - Matlab表面hsv颜色图
- couchbase - 如何使用 N1ql 查询选择文档的子字段
- shell - 蜂巢脚本外壳错误
- java - log4j 不创建日志文件
- javascript - 固定数据表中的悬停工具提示内容
- sql - SAS 中的数据但被逻辑卡住了
- jakarta-mail - JavaMail:是否可以在连接期间临时启用存储调试?
- javascript - 用 webpack 中的字段值替换带有静态字段的对象
- json - React Native:将 console.log 输出记录为 JSON 发送到服务器