【问题标题】:How to save hdf5 as a txt or csv in R?如何在 R 中将 hdf5 保存为 txt 或 csv?
【发布时间】: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 中处理数据框。

【问题讨论】:

    标签: r hdf5


    【解决方案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)。

    【讨论】:

      猜你喜欢
      • 2017-09-09
      • 2020-12-18
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      • 2020-03-29
      • 2014-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多