美文网首页
30.关于readr包里的read系列函数

30.关于readr包里的read系列函数

作者: 心惊梦醒 | 来源:发表于2021-08-14 21:48 被阅读0次

    【上一篇: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():读以 分号 分割、以 \color{blue}{,}表示小数点的文件(这些文件格式在一些欧洲国家用得很普遍)
    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系列函数的全部参数解析】

    相关文章

      网友评论

          本文标题:30.关于readr包里的read系列函数

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