1.4 readr
readr提供了一种快速友好的方式读取矩形数据3(如:csv,tsv,fwf),且当读取大型数据集时默认有进度条显示。
如果对readr包不熟悉,可以直接阅读包作者大神Hadley Wickham的书R for data science 中data import chapter章节。
1.4.1 安装
直接安装tidyverse获取或单独安装readr。
# The easiest way to get readr is to install the whole tidyverse:
install.packages("tidyverse")
# Alternatively, install just readr:
install.packages("readr")
# Or the the development version from GitHub:
# install.packages("devtools")
::install_github("tidyverse/readr") devtools
1.4.2 用法
readr包是tidyverse系列的核心包,可以加载tidyverse使用。
library(tidyverse)
1.4.2.1 主要函数
readr支持七种read_
功能的文件格式。
— read_csv()
:逗号分隔符文件
- read_tsv()
:制表符分割文件
- read_delim()
:规定分隔符文件
- read_fwf()
:固定宽度文件
- read_table()
:表格文件,列间用空格隔开
- read_log()
:Web日志文件
在大多数情况下,我们常使用read_csv()
,提供文件路径,将得到数据表。示例如下:
<- read_csv(readr_example("mtcars.csv")) mtcars
通过上述输出反馈,我们可以知道读进去的数据集每列类型。如果发现不对可以通过col_types
参数修改。大多数情况下,我们并不需要指定列的类型,readr会自动猜测列类型。
<- read_csv(readr_example("mtcars.csv"), col_types =
mtcars cols(
mpg = col_double(),
cyl = col_integer(),
disp = col_double(),
hp = col_integer(),
drat = col_double(),
vs = col_integer(),
wt = col_double(),
qsec = col_double(),
am = col_integer(),
gear = col_integer(),
carb = col_integer()
) )
1.4.2.2 参数
read_csv()
的参数如下:
read_csv(
file,col_names = TRUE,
col_types = NULL,
locale = default_locale(),
na = c("", "NA"),
quoted_na = TRUE,
quote = "\"",
comment = "",
trim_ws = TRUE,
skip = 0,
n_max = Inf,
guess_max = min(1000, n_max),
progress = show_progress(),
skip_empty_rows = TRUE
)
col_types :指定列类型,可用项如下所示(含简写): c = character,i = integer,n = number,d = double,l = logical,f = factor,D = date,T = date time,t = time,默认值为guess.
locale:locale参数是readr中很重要的一个参数,指定日期使用的月和日的名称,时区,字符编码,日期格式,数字的小数和点位数和分隔符。
locale()
的第一个参数是date_names,控制月份和日期的名称,指定最简单的方式ISO 639 language code
locale('zh') # 中文
locale('ja') #日本
locale('ko') #韩国
编码和时区问题是我们常面临的问题。
read_csv(readr_example("mtcars.csv"),locale = locale(encoding = 'UTF-8',tz = 'Asia/Shanghai'))
详细信息查看手册vignette("locales")
。
1.4.3 导出功能
由于系统不同的缘故,在win系统下可能面临编码问题。我用readr导出数据时一般采用write_excel_csv()
功能导出。
需要说明的是write_
系列函数可以将输出文件压缩。
data(storms, package = "dplyr")
write_csv(storms, "storms.csv")
write_csv(storms, "storms.csv.gz")
1.4.4 总结
大部分情况下,当数据整洁时且不涉及时间(日期不影响)时,采用默认参数读取数据即可。
当数据集前面行缺失值较多,readr自动猜数据列类型错误时,需要我们人为指定列类型;当编码时区等错误时,需指定locale()
;以上是可能遇到的问题以及解决办法。
矩形数据英文中表示为 rectangular data,矩形数据每一列都是变量(特征),而每一行都是案例或记录,关系数据库中的单表就是矩形数据的一种。↩︎