美文网首页
32.关于parse系列函数之解析数字

32.关于parse系列函数之解析数字

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

    【上一篇:31.readr包里read系列函数的全部参数解析】
    【下一篇:33.关于parse系列函数之解析字符串】

        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
    

        3)为了便于阅读,会在数字之间加上分组字符,有的国家是用逗号,例如1,000,000,000(美国),有的国家使用单引号,例如1'000'000'000(瑞士),有的国家使用点,例如1.000.000.000(欧洲)。可以用parse_number()的locale参数解决。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
    

        总结:书中将parse_double()和parse_number()放在一起讲。parse_double()是比较严格的解析函数,parse_number()比较灵活。

    【上一篇:31.readr包里read系列函数的全部参数解析】
    【下一篇:33.关于parse系列函数之解析字符串】

    相关文章

      网友评论

          本文标题:32.关于parse系列函数之解析数字

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