R语言tidyverse软件包学习Ⅲ-readr、tibble
R语言tidyverse软件包学习Ⅲ-readr、tibble

R语言tidyverse软件包学习Ⅲ-readr、tibble

tidyverse包含很多热门的软件包,这次介绍readr、tibble

> library(tidyverse)
── Attaching core tidyverse packages ───────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.2     ✔ readr     2.1.4
✔ forcats   1.0.0     ✔ stringr   1.5.0
✔ ggplot2   3.4.2     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.0
✔ purrr     1.0.1 

readr

reader的目的是提供一种快速友好的方式从分隔文件中读取矩形数据,例如逗号分隔值(CSV)和制表符分隔值(TSV)。它被设计用于解析公共数据库的多种类型的数据,同时在解析导致意外结果时提供信息丰富的问题报告。

ls("package:readr",pattern = "read")
 [1] "read_builtin"           "read_csv"               "read_csv_chunked"      
 [4] "read_csv2"              "read_csv2_chunked"      "read_delim"            
 [7] "read_delim_chunked"     "read_file"              "read_file_raw"         
[10] "read_fwf"               "read_lines"             "read_lines_chunked"    
[13] "read_lines_raw"         "read_lines_raw_chunked" "read_log"              
[16] "read_rds"               "read_table"             "read_table2"           
[19] "read_tsv"               "read_tsv_chunked"       "readr_example"         
[22] "readr_threads"          "should_read_lazy"      

Readr通过read_*()常用函数支持以下文件格式:

  • read_csv(): 逗号分隔符文件 (CSV)
  • read_tsv(): 制表符分隔文件 (TSV)
  • read_csv2(): 分号分割符文件
  • read_delim(): 自定义分隔符文件 (CSV and TSV 是一般常见情况)
  • read_fwf(): 定宽文件
  • read_table(): 行文件
  • read_log(): 网络文本文件

reader有两种主要的替代方案:base R和data都可以读取文件。

reader与base R基函数相比,readr函数:

  • 为参数使用一致的命名方案(e.g. col_names 和 col_types 而不是 header 和 colClasses)
  • 通常要快得多(高达10 -100倍),具体取决于数据集。
  • 将字符串保留为默认值,并自动解析常见的日期/时间格式。
  • 如果加载需要一段时间,有一个有用的进度条。

tibble

tibble函数的主要目的即:构建数据框。它的用法类似于base::data.frame(),但有几个明显的区别:

  • 除了生成一个data.frame之外,返回的数据框还有tbl_df属性。这是“tibbles”的一些特殊的功能。
  • 在转换用户输入方面,Tibble()比base::data.frame()要‘懒’得多。
    • 字符向量不被强制因子化。
    • List列是明确可以使用的,不需要特殊处理。
    • 列名不会被修改。
    • 列的内部名称保持不变。
  • tibble数据框的变量可以是标量、数组、向量,甚至是列表(比较特殊且重要的一点)。
> ls("package:tibble")
 [1] "%>%"                "add_case"           "add_column"        
 [4] "add_row"            "as.tibble"          "as_data_frame"     
 [7] "as_tibble"          "as_tibble_col"      "as_tibble_row"     
[10] "char"               "column_to_rownames" "data_frame"        
[13] "data_frame_"        "deframe"            "enframe"           
[16] "frame_data"         "frame_matrix"       "glimpse"           
[19] "has_name"           "has_rownames"       "is.tibble"         
[22] "is_tibble"          "lst"                "lst_"              
[25] "new_tibble"         "num"                "obj_sum"           
[28] "remove_rownames"    "repair_names"       "rowid_to_column"   
[31] "rownames_to_column" "set_char_opts"      "set_num_opts"      
[34] "set_tidy_names"     "size_sum"           "tbl_sum"           
[37] "tibble"             "tibble_"            "tibble_row"        
[40] "tidy_names"         "tribble"            "trunc_mat"         
[43] "type_sum"           "validate_tibble"    "view"          

tips:使用as_tibble()函数把一个已经存在的data.frame转换成tbl_df格式data.frame有一个需要注意的点:tibble会丢弃原始data.frame的rowname。
所以如果你的后续分析需要用到行名,需要提前把行名纳入 data.frame 作为一列。(rownames_to_column()column_to_rownames()函数可以轻易实现)

 #

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注