介绍

parse系列函数接受一个字符向量,并返回一个更专门化的向量,如逻辑、整数或日期。
学习这些函数是为了更好地理解后面readr是如何解析文件的。
有八个特别重要的解析函数:parse_logical()和parse_integer()、parse_double()、parse_double()、parse_factor()、parse_factor()和parse_factor()和parse_time()。
这些函数的参数列表是很相同的:na指定将哪些字符解析成缺失值;locale进行区域设置,默认以美国为中心,也使用locale()创建自己的地区,控制诸如默认时区、编码、小数点、大标记和日/月名称等内容;trim_ws默认去掉字符前后的空白符

  1. parse_logical(x, na = c("", "NA"), locale = default_locale(), trim_ws = TRUE)
  2. parse_integer(x, na = c("", "NA"), locale = default_locale(), trim_ws = TRUE)
  3. parse_double(x, na = c("", "NA"), locale = default_locale(), trim_ws = TRUE)
  4. parse_number(x, na = c("", "NA"), locale = default_locale(), trim_ws = TRUE)
  5. parse_character(x, na = c("", "NA"), locale = default_locale(), trim_ws = TRUE)

第一部分是解析数字。

关于数字,有三个主要的问题:
1)世界上不同地区的人写数字的方式是不一样的,例如有些国家的人用“.”(点)表示小数点,有的则用“,”(逗号)。解决方法是readr的locale概念

  1. > parse_double("1.23")
  2. [1] 1.23
  3. # 通过设置locale函数的decimal_mark参数实现
  4. > parse_double("1,23", locale = locale(decimal_mark = ","))
  5. [1] 1.23

2)数字上下文有其他的字符

例如“$1000”、“10%”。用parse_number()函数解决这个问题,这个函数会忽略数字前后的非数字字符,对货币和百分百特别有用,还可以用来提取嵌入文本中的数字。

  1. > parse_number("$100")
  2. [1] 100
  3. > parse_number("20%")
  4. [1] 20
  5. > parse_number("It cost $123.45")
  6. [1] 123.45

数字之间加上分组字符

parse_number()函数默认:数字内部忽略区域设置指定的分组标记。

  1. # parse_number()函数默认忽略分组标记
  2. > parse_number("$123,456,789")
  3. [1] 123456789
  4. # 默认以美国为中心,所以逗号解析为分组符号,默认被忽略,点是小数点,
  5. > parse_number("1,234.56")
  6. [1] 1234.56
  7. # 欧洲
  8. > parse_number("123.456.789", locale = locale(grouping_mark = "."))
  9. [1] 123456789
  10. # 瑞士
  11. > parse_number("123'456'789", locale = locale(grouping_mark = "'"))
  12. [1] 123456789


plt