美文网首页
数据的读写处理

数据的读写处理

作者: 蓝色滑行 | 来源:发表于2020-01-28 16:53 被阅读0次

    title: "读写竞赛"
    author: "ky"
    date: "2020年1月28日"
    output: word_document


    如果我们在R中已经得到了一个非常大的数据文件,应该用什么工具才能迅速写出这个数据表呢?
    如果我们在文件夹中有一个很大的数据表文件,怎样才能迅速读取并载入工作区间呢?
    下面我们构建一个较大的数据框,实践测试一下。

    library(pacman)
    p_load(fst,feather,data.table,tidyverse)
    nr_of_rows <- 1e7
    
      df <- data.frame(
      logical = sample(c(TRUE,FALSE,NA),prob = c(0.85,0.1,0.05),nr_of_rows,replace = TRUE),
      Integer = sample(1L:100L,nr_of_rows,replace = TRUE),
      Real = sample(sample(1:10000,20)/100,nr_of_rows,replace =  TRUE),
      Factor = as.factor(sample(labels(UScitiesD),nr_of_rows,replace = TRUE))
    
    )
    

    查看一下数据文件大小

    object.size(df) %>%
      print(unit = 'auto')
    

    csv组别

    write.csv base包中基础函数
    write_csv tidyverse包中的函数
    fwrite data.table包中的函数

    setwd('e:/r-lhtz')
    p_load(microbenchmark)
    microbenchmark(write.csv(df,'df_base.csv'),
                   write_csv(df,'df_readr.csv'),
                   fwrite(df,'df_dt.csv'),
                   times = 1,unit = 's')
    

    读入测试(统一读入df_dt数据)

    microbenchmark(read.csv('df_dt.csv') -> df_base,
                   read_csv('df_dt.csv') -> df_readr,
                   fread('df_dt.csv') -> df_dt,
                   times = 1,unit = 's')
    
    df_dt %>% as_tibble() -> df_readr1 #使用data.table读入转化为tidyverse系统处理
    df_readr1
    gdata::keep(df,sure =T)  #仅仅保留df变量
    file.remove(c('df_dt.csv','df_base.csv','df_readr.csv'))  #删除写入文件
    

    2.bin组别

    二进制可以获得更快的读写速度,在base包中,存储一个数据表可以使用saveRDS函数,文件后缀为“.rds”,重新
    读取可以使用readRDS函数。在tidyverse生态系统中,readr包提供了read_rds函数和write_rds函数。data.table
    则主要有feather和fst包。

    microbenchmark(write_rds(df,'df.rds'),
                   write_feather(df,'df.feather'),
                   write_fst(df,'df.fst'),
                   times = 10,unit = 's')
    
    microbenchmark(read_rds('df.rds') -> df_rds,
                   read_feather('df.feather') -> df_feather,
                   read_fst('df.fst') -> df_fst,
                   times = 10, unit = 's')
    
    setequal(df,df_rds)
    setequal(df,df_feather)
    setequal(df,df_fst)
    
    file.remove(c('df.rds','df.feather','df.fst'))
    

    数据存取转换的瑞士军刀(rio)

    rio包能够对各种格式进行输入和输出,首次使用需要安装rio包

    library(pacman)
    p_load(rio)
    
    export(iris,'iris.xlsx')
    export(list(mtcars =mtcars,iris=iris),file = 'mtcars_iris.xlsx') #两个数据集生成在一个文件中的两个sheet
    import_list('mtcars_iris.xlsx') -> mtcars_iris
    mtcars_iris[[1]]
    mtcars_iris[[2]]
    
    
    import_list('mtcars_iris.xlsx',which = 2) -> iris2  #指定取出第2个工作簿文件
    iris2
    

    rio包中的convert函数支持格式转换

    convert('iris.xlsx','iris.fst')
    unlink(c('iris.xlsx','mtcars_iris.xlsx','iris.fst','iris.csv','iris1.csv')) #unlink等价于file.remove

    相关文章

      网友评论

          本文标题:数据的读写处理

          本文链接:https://www.haomeiwen.com/subject/yicmthtx.html