美文网首页
31.readr包里read系列函数的全部参数解析

31.readr包里read系列函数的全部参数解析

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

【上一篇:30.关于readr包里的read系列函数】
【下一篇:32.关于parse系列函数之解析数字】

    下面这四个函数,总共17个参数,14个参数是共有的,只有read_delim()多了3个参数。


四个函数参数一览表
公共参数

    file参数上一篇中有详细说明,不再赘述。
    quote:用于引用字符串的单个字符。
    col_names:参数上一篇中也有说明,另外,如果列名中有重复,则会在重复值后面加数字后缀以作区分。
    col_types:可以是NULL,一个cols()规范或字符串。如果是NULL,则默认用输入文件的前1000行判断列类型;如果是一个由cols()函数创建的列规范,则每一列都必须对应一个列规范;也可以使用紧凑的字符串指定列类型:c = character,i = integer,n = number,d = double,l = logical,f = factor,D = date,T = date time,t = time,? = guess,_ or - = skip

> read_csv("x,y\n1,2\n3,4", col_types = "dc")
# A tibble: 2 x 2
      x y    
  <dbl> <chr>
1     1 2    
2     3 4   

    locale:区域设置控制的default因地点而异。默认的地区是以美国为中心的(如R),但您可以使用locale()创建自己的地区,控制诸如默认时区、编码、小数点、大标记和日/月名称等内容。
    na:上一篇也有说明:
    quoted_na:是否应该将引号内的缺失值视为缺失值,默认为TRUE。
    comment:见上一篇。
    trim_ws:trim white space,在解析每个字段之前,是否应该修剪前导和尾随空格?默认为TRUE。

> read_csv("a,b,c\n1.0,2.0,3.0\nA,B,C\n A1, B1 ,C1 ")
# A tibble: 3 x 3
  a     b     c    
  <chr> <chr> <chr>
1 1.0   2.0   3.0  
2 A     B     C    
3 A1    B1    C1   
> read_csv("a,b,c\n1.0,2.0,3.0\nA,B,C\n A1, B1 ,C1 ",trim_ws=F)
# A tibble: 3 x 3
  a     b      c    
  <chr> <chr>  <chr>
1 "1.0" "2.0"  "3.0"
2 "A"   "B"    "C"  
3 " A1" " B1 " "C1 "

    n_max:读取的最大记录数(行数)。
    guess_max:用于猜测列类型的最大记录数。
    progress:是否显示进度条。默认(必须在在交互会话模式下)当预估读取时间超过5秒时,每50000个值显示一次进度。通过设置options(readr.show_progress = FALSE)可关闭。
    skip_empty_rows:是否跳过空行。如果是FALSE的话,空行对应的每一列都解析成NA。

非公共参数

    delim:用于在一条记录中分隔字段的单个字符。
    escape_backslash:文件是否使用反斜杠来转义特殊字符。默认是FLASE
    escape_double:文件是否通过加倍引号来转义?例如,如果该选项为TRUE,则值""""表示一个单引号,\"。


另外三个read函数参数一览表
    上图中的三个函数比第一张图的四个少很多参数,只有read_fwf()函数多了一个col_positions参数,这个参数的值用fwf_empty()、fwf_widths()或fwf_positions()函数指定。read_table()等三个函数是用来读取textual data类型的数据,read_csv()等四个是用来读取flat file data的最常见类型数据。
    后三个函数都没有quote和quote_na参数,也就是说这些函数会把文件中出现的各种字符(除空白符)都原样展示?read_table()函数之所以没有trim_ws参数是因为函数本身就是要读以空白符分割的文件。
    read_table()和read_table2()的参数完全相同。两者的区别在于:
    a) read_table()比read_table2()更严格,每一行的长度必须相同(也就是说每一行所有字符(包括空白符)长度之和应一致),每行中每个字段的位置相同(如下图,read_table()可以正确将第三行的"J Sm"、"M J"解析到一列中,而read_table2()不行)。它首先找到空列,然后像固定宽度文件一样解析。
read_table()可以正确读的格式:文本文件中以空白符分割的两行
> read_table("1    2    10    11    AAA    BBB
 21   233  AAAAA BBB   CCC    DDD
 J Sm M J  J.Smi VVV   M      TT",col_names=F)

# A tibble: 3 x 6
  X1    X2    X3    X4    X5    X6   
  <chr> <chr> <chr> <chr> <chr> <chr>
1 1     2     10    11    AAA   BBB  
2 21    233   AAAAA BBB   CCC   DDD  
3 J Sm  M J   J.Smi VVV   M     TT 

# read_table2()虽然可以允许任意数量的空白符在列之间,也允许每行长度不一
# 但会丢失一些列(例如下面的第三列)
> read_table2("1    2    10    11    AAA    BBB
   21   233  AAAAA BBB   CCC    DDD
   J Sm M J  J.Smi VVV   M      TT",col_names=F)
Warning: 1 parsing failure.
row col  expected    actual         file
  3  -- 6 columns 8 columns literal data

# A tibble: 3 x 6
  X1    X2    X3    X4    X5    X6   
  <chr> <chr> <chr> <chr> <chr> <chr>
1 1     2     10    11    AAA   BBB  
2 21    233   AAAAA BBB   CCC   DDD  
3 J     Sm    M     J     J.Smi VVV

    b) read_table2()类似于read.table(),它允许任意数量的空白字符在列之间,并且行可以是不同的长度。
    read_log()函数用得好少,不解释。

    记住以一个参数,其他参数中,col_names、skip、comment、na、qoute可以解决实际会遇到的~75%的问题。

【上一篇:30.关于readr包里的read系列函数】
【下一篇:32.关于parse系列函数之解析数字】

相关文章

网友评论

      本文标题:31.readr包里read系列函数的全部参数解析

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