如何在 R 中将 hdf5 保存为 txt 或 csv?
Posted
技术标签:
【中文标题】如何在 R 中将 hdf5 保存为 txt 或 csv?【英文标题】:How to save hdf5 as a txt or csv in R? 【发布时间】:2015-08-26 08:38:36 【问题描述】:使用here的信息我查看了hdf5文件的结构:
source("http://bioconductor.org/biocLite.R")
biocLite("rhdf5")
library(rhdf5)
> str(h5ls("C:/Users/durraniu/hd5_file"))
'data.frame': 400 obs. of 5 variables:
$ group : chr "/" "/data" "/data" "/data" ...
$ name : chr "data" "ACC_State" "ACC_State_Frames" "ACC_Voltage" ...
$ otype : Factor w/ 15 levels "H5I_FILE","H5I_GROUP",..: 2 5 5 5 5 5 5 5 5 5 ...
$ dclass: chr "" "INTEGER" "INTEGER" "FLOAT" ...
$ dim : chr "" "1 x 1" "1" "15869 x 1" ...
一些细节:
> head(h5ls("C:/Users/durraniu/hd5_file"))
group name otype dclass dim
0 / data H5I_GROUP
1 /data ACC_State H5I_DATASET INTEGER 1 x 1
2 /data ACC_State_Frames H5I_DATASET INTEGER 1
3 /data ACC_Voltage H5I_DATASET FLOAT 15869 x 1
4 /data CFS_Accelerator_Pedal_Position H5I_DATASET FLOAT 15869 x 1
5 /data CFS_Auto_Transmission_Mode H5I_DATASET INTEGER 28 x 1
> tail(h5ls("C:/Users/durraniu/hd5_file"))
group name otype dclass dim
394 /header numvalues H5I_DATASET INTEGER 246
395 /header rate H5I_DATASET INTEGER 246
396 /header type H5I_DATASET STRING 246
397 /header units H5I_DATASET STRING 246
398 /header varrateflag H5I_DATASET INTEGER 246
399 / info H5I_GROUP
我想探索和分析数据,但不想使用 hdf5 格式。我可以将其转换为数据框或一组不同的数据框吗?我可以将这些数据保存为 txt 或 csv 文件吗?我很擅长在 R 中处理数据框。
【问题讨论】:
【参考方案1】:请看下面的例子:
我从?h5write
的文档中获取了这个:
首先我制作了一个示例.h5
来演示如何将其读取为data.frame:
library(rhdf5)
h5createFile("ex_ls_dump.h5")
# create groups
h5createGroup("ex_ls_dump.h5","foo")
h5createGroup("ex_ls_dump.h5","foo/foobaa")
B = array(seq(0.1,2.0,by=0.1),dim=c(5,2,2))
attr(B, "scale") <- "liter"
h5write(B, "ex_ls_dump.h5","foo/B")
这会以.h5
格式在我的磁盘上写入一个数组。
如果我这样做:
> str(h5ls("ex_ls_dump.h5"))
'data.frame': 3 obs. of 5 variables:
$ group : chr "/" "/foo" "/foo"
$ name : chr "foo" "B" "foobaa"
$ otype : Factor w/ 15 levels "H5I_FILE","H5I_GROUP",..: 2 5 2
$ dclass: chr "" "FLOAT" ""
$ dim : chr "" "5 x 2 x 2" ""
我得到的是文件的内容,而不是数据本身。它只包含有关文件的信息。来自文档:
列出 HDF5 文件的内容。
现在,如果您想正常读取此文件,即由于我的 .h5
文件是一个数组,我想读取它,因此您使用 h5read
:
E = h5read("ex_ls_dump.h5","foo/B")
> E
, , 1
[,1] [,2]
[1,] 0.1 0.6
[2,] 0.2 0.7
[3,] 0.3 0.8
[4,] 0.4 0.9
[5,] 0.5 1.0
, , 2
[,1] [,2]
[1,] 1.1 1.6
[2,] 1.2 1.7
[3,] 1.3 1.8
[4,] 1.4 1.9
[5,] 1.5 2.0
> is.array(E)
[1] TRUE
因此,只需使用h5read
在 R 中读取您的文件,它将以与写入相同的格式读取(在您的情况下可能是 data.frame)。
【讨论】:
以上是关于如何在 R 中将 hdf5 保存为 txt 或 csv?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C 中将动态分配的 3D 数组写入 hdf5 文件?