【上一篇:29.关于tibble和data.frame之二】
【下一篇:31.readr包里read系列函数的全部参数解析】
read系列函数的作用是将外部数据输入到R中。
强调:本篇主要讲的是readr包里的read系列函数,不是base R中的read系列函数,两种是不一样的。更推荐使用readr包里的read系列函数的原因有大致以下几点:
1. readr包里的read系列函数比base R里的读取速度快(~10倍),而且对运行时间较长的数据,这些函数还可以显示进度条。
2. readr包里的read系列函数返回一个tibble,不会改变数据类型(尤其是将字符向量变成因子这种,在base R的read系列函数里最让初学者头疼了),还可以直接用参数指定列名。base R的read系列函数返回的是传统的dataframe。
3. base R中的函数继承了一些操作系统和环境变量的行为,所以在平台或系统间的移植性有些不好。readr包里的就没有这个问题。
base R中的read系列函数包括:read.table()、read.csv()、read.csv2()、read.delim()、read.delim2()、read.fwf()等。
readr包里的read系列函数包括:read_table()、read_table2()、read_csv()、read_csv2()、read_tsv()、read_delim()、read_fwf()、read_log()等。
不管是base R中还是readr包中的read系列函数,他们各自都有相似的语法:第一个参数是要读取的文件,然后是其他的参数。
read_csv():读以 逗号 分割的文件
read_csv2():读以 分号 分割、以 表示小数点的文件(这些文件格式在一些欧洲国家用得很普遍)
read_tsv():读以制表符(Tab)分割的文件
read_delim():读以指定分隔符分割的文件,有个delim是用来指定分割符的
read_table():读以一个或多个空白符分割的文件
read_table2():读以一个或多个空白符分割的文件,与read_table()的区别。
read_fwf():读以固定宽度分割的文件
read_log():Read common/combined log file into a tibble
下面开始讲readr包里的read系列函数。
readr包是tidyverse的一部分,所以在使用readr包系列函数之前需要先:library(tidyverse)。
首先是第一个参数,第一个参数是要读取的文件,可以是一个文件(文件也可以是.gz, .bz2, .xz, or .zip压缩格式的,函数会自动解压,所以不需要提前解压,省事省空间),也可以是一个链接,要以http://、https://、ftp://或者 ftps://开头,此时会先自动下载,当然远程文件是压缩格式的也会下载后自动解压的。还可以是literal data,这种数据主要是用来简单举个例子和测试的。
啥是literal data?举个例子:
# 用换行符分割每一行,每一行的内容元素是用逗号分割
# 输出结果默认将第一行认为是列名
example <- read_csv("a,b,c
1,2,3
4,5,6
")
# 等价于
example<-read_csv("a,b,c\n1,2,3\n4,5,6")
# 输出结果是:
# A tibble: 2 x 3
a b c
<dbl> <dbl> <dbl>
1 1 2 3
2 4 5 6
用read_csv()函数举例说明一些用法和参数:
# 读一个文件之后,打印出来的Column specification信息是tibble的列名和列的数据类型
> read_csv(readr_example("mtcars.csv"))
-- Column specification ------------------------------------------------------
cols(
mpg = col_double(),
cyl = col_double(),
disp = col_double(),
hp = col_double(),
drat = col_double(),
wt = col_double(),
qsec = col_double(),
vs = col_double(),
am = col_double(),
gear = col_double(),
carb = col_double()
)
# A tibble: 32 x 11
mpg cyl disp hp drat wt qsec vs am gear carb
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1
7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4
8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2
10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4
# ... with 22 more rows
下面几个参数可以解决实际中遇到的~75%的问题:
1) skip:skip=n指定跳过输入文件的前n行
2) comment:例如comment="#"表示以"#"开头的行都被认为是注释行,读的时候会忽略这些行。
3) na:默认是na=c("","NA"),指定一些字符,则函数会将这些字符解析为missing values
4) col_names:col_names参数可以为逻辑值,也可以是向量,默认是TRUE,表示将第一行视为列名
如果是FLASE,则自动命名列名为X1..Xn:
read_csv("1,2,3\n4,5,6", col_names = FALSE)
# A tibble: 2 x 3
X1 X2 X3
<dbl> <dbl> <dbl>
1 1 2 3
2 4 5 6
如果指定的是字符串向量,则表示要为tibble指定列名:
> read_csv("1,2,3\n4,5,6", col_names = c("x", "y", "z"))
# A tibble: 2 x 3
x y z
<dbl> <dbl> <dbl>
1 1 2 3
2 4 5 6
下篇详细看readr包里read系列函数的参数。
【上一篇:29.关于tibble和data.frame之二】
【下一篇:31.readr包里read系列函数的全部参数解析】
网友评论