介绍
parse系列函数接受一个字符向量,并返回一个更专门化的向量,如逻辑、整数或日期。
学习这些函数是为了更好地理解后面readr是如何解析文件的。
有八个特别重要的解析函数:parse_logical()和parse_integer()、parse_double()、parse_double()、parse_factor()、parse_factor()和parse_factor()和parse_time()。
这些函数的参数列表是很相同的:na指定将哪些字符解析成缺失值;locale进行区域设置,默认以美国为中心,也使用locale()创建自己的地区,控制诸如默认时区、编码、小数点、大标记和日/月名称等内容;trim_ws默认去掉字符前后的空白符
parse_logical(x, na = c("", "NA"), locale = default_locale(), trim_ws = TRUE)
parse_integer(x, na = c("", "NA"), locale = default_locale(), trim_ws = TRUE)
parse_double(x, na = c("", "NA"), locale = default_locale(), trim_ws = TRUE)
parse_number(x, na = c("", "NA"), locale = default_locale(), trim_ws = TRUE)
parse_character(x, na = c("", "NA"), locale = default_locale(), trim_ws = TRUE)
第一部分是解析数字。
关于数字,有三个主要的问题:
1)世界上不同地区的人写数字的方式是不一样的,例如有些国家的人用“.”(点)表示小数点,有的则用“,”(逗号)。解决方法是readr的locale概念
> parse_double("1.23")
[1] 1.23
# 通过设置locale函数的decimal_mark参数实现
> parse_double("1,23", locale = locale(decimal_mark = ","))
[1] 1.23
2)数字上下文有其他的字符
例如“$1000”、“10%”。用parse_number()函数解决这个问题,这个函数会忽略数字前后的非数字字符,对货币和百分百特别有用,还可以用来提取嵌入文本中的数字。
> parse_number("$100")
[1] 100
> parse_number("20%")
[1] 20
> parse_number("It cost $123.45")
[1] 123.45
数字之间加上分组字符
parse_number()函数默认:数字内部忽略区域设置指定的分组标记。
# parse_number()函数默认忽略分组标记
> parse_number("$123,456,789")
[1] 123456789
# 默认以美国为中心,所以逗号解析为分组符号,默认被忽略,点是小数点,
> parse_number("1,234.56")
[1] 1234.56
# 欧洲
> parse_number("123.456.789", locale = locale(grouping_mark = "."))
[1] 123456789
# 瑞士
> parse_number("123'456'789", locale = locale(grouping_mark = "'"))
[1] 123456789
plt