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()函数可以轻易实现)