雅马哈r3(R 数据处理(五))
理解和使用AM和PM R数据处理(5)
前言
前面讲了readr的解析器,共有8个解析函数。让 下面详细介绍每个解析函数的用法。
解析器
1. 数值
数值的分析看似相当简单,但实际上有几个问题需要解决世界上不同地方的人用不同的方式写数字。例如,一些国家使用。区分实数的整数部分和小数部分,而其他国家使用。数字在不同的使用场景下用不同的字符包装,比如1000美元,通常有10%的数字包含分组字符,便于阅读。比如1,000,000为了解决之一个问题,readr提供了一个locale参数来指定不同地区的解析 。
解析数字时,最重要的选项是十进制字符。您可以设置一个新的语言环境,并指定decimal_mark参数的值来覆盖默认值。
parse _ double( ;1.23 )[1]1.23 parse _ double( ;1,1,23 locale=locale(decimal _ mark= ; )] [1] 1.23 parse _ number()用于解决第二个问题它忽略了数字前后的非数字字符,这对货币是有害的。
parse _ number( ;100美元 )[1]100 parse _ number( ;20%及以上。)[1]20 parse _ number( ;它价值123.45美元 )[1] 123.45结合parse _ number()和locale可以忽略一个问题。
# UsedinAmericaparse _ number( ;123456789美元 )[1]123456789 # usedinmanypartsofeoreparse _ number( ;123 . 456 . 789 ;Locale=Locale(grouping _ mark= ; ))[1]123456789 # usedinswitzerlandparse _ number( ;123 456 789 locale=locale(grouping _ mark= ; )) [1] 12345677.
,生活并没有那么简单,因为同一根弦有很多种表达方式。
为了理解解析是如何发生的,我们需要深入了解计算机是如何表示字符串的。在R中,我们可以使用charToRaw()来获得字符串的底层表示。
沙特劳( 哈雷 )[1] 4861646C6579每个十六进制数代表一个字节的信息,48代表H,61代表A等等。从十六进制数字到字符的映射称为编码,在这种情况下,编码称为ASCII。
ASCII在表示英语字符方面做得很好,因为它是美国信息交换的标准代码。
对于非英语国家的人来说,事情就有点复杂了。在计算机出现的早期,有许多相互竞争的非英语字符编码标准。要正确解释字符串,您需要知道值和编码。
例如,两种常见代码,Latin1(西欧语言的ISO-8859-1)和Latin2(东欧语言的ISO-8859-2)。在Latin1中,字节b1表示/-,但在Latin2中,它表示。
幸运的是,现在有一个几乎在任何地方都可以支持的标准UTF-8。UTF-8几乎可以编码今天人类使用的所有字符,以及许多额外的符号(如表情符号)。
Readr使用UTF-8,它假设您的数据在读取时是UTF-8编码的,并且在写入时总是使用。
如果你的系统没有。不支持UTF-8格式(你的电脑赢了 不要太老),它可能看起来非常奇怪和混乱。
看一个例子
x1- ;厄尔尼诺现象
nbspparticularlynbspbadnbspthisnbspyear#34gtnbspx2nbsplt-nbsp#34?±???é???í#34gtnbspx1[1]nbsp#34ElnbspNi?onbspwasnbspparticularlynbspbadnbspthisnbspyear#34gtnbspx2[1]nbsp#34?±??????í#34非英文字符并未被正确转译
使用 parse_character() 指定编码格式
parse_character(x1,nbsplocalenbsp=nbsplocale(encodingnbsp=nbsp#34Latin1#34))#gtnbsp[1]nbsp#34ElnbspNi?onbspwasnbspparticularlynbspbadnbspthisnbspyear#34parse_character(x2,nbsplocalenbsp=nbsplocale(encodingnbsp=nbsp#34Shift-JIS#34))#gtnbsp[1]nbsp#34こんにちは#34
那如果我们不知道字符串的编码方式,要如何解码出正确的字符呢?
如果幸运的话,它会在数据文档中的某个地方。不幸的是,这种情况很少发生, readr 提供了 guess_encoding() 来帮助您解决这个问题
它也并不是万无一失的,当你有大量的文本时效果会更好,但它是一个合理的起点。在找到合适的编码之前,可以尝试几种不同的编码。
gtnbspguess_encoding(charToRaw(x1))#nbspAnbsptibble:nbsp2nbspxnbsp2nbspnbspencodingnbspnbspnbspconfidencenbspnbspltchrgtnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspltdblgt1nbspISO-8859-1nbspnbspnbspnbspnbspnbspnbsp0.462nbspISO-8859-9nbspnbspnbspnbspnbspnbspnbsp0.23gtnbspguess_encoding(charToRaw(x2))#nbspAnbsptibble:nbsp1nbspxnbsp2nbspnbspencodingnbspconfidencenbspnbspltchrgtnbspnbspnbspnbspnbspnbspnbspnbspnbspltdblgt1nbspKOI8-Rnbspnbspnbspnbspnbspnbspnbspnbspnbsp0.42
guess_encoding() 的之一个参数可以是文件的路径,也可以是字符串的原始向量
3. 因子
R 使用因子来表示一组所有可能值已知的分类变量。
通过向 parse_factor() 的 levels 参数传入一个已知的向量作为分类向量,当出现意外的值时会生成警告信息
gtnbspfruitnbsplt-nbspc(#34apple#34,nbsp#34banana#34)gtnbspparse_factor(c(#34apple#34,nbsp#34banana#34,nbsp#34bananana#34),nbsplevelsnbsp=nbspfruit)Warning:nbsp1nbspparsingnbspfailure.rownbspcolnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspexpectednbspnbspnbspactualnbspnbsp3nbspnbsp--nbspvaluenbspinnbsplevelnbspsetnbspbananana[1]nbspapplenbspnbspbanananbspltNAgtnbspnbspattr(,#34problems#34)#nbspAnbsptibble:nbsp1nbspxnbsp4nbspnbspnbspnbsprownbspnbspnbspcolnbspexpectednbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspactualnbspnbspnbspnbspltintgtnbspltintgtnbspltchrgtnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspltchrgtnbspnbspnbsp1nbspnbspnbspnbspnbsp3nbspnbspnbspnbspNAnbspvaluenbspinnbsplevelnbspsetnbspbanananaLevels:nbspapplenbspbanana
4. 时间和日期
你可以根据需要从三个解析器中选择相应的解析器
parse_datetime(): ISO8601 格式的日期和时间,ISO8601 是一个国际标准,其中日期的组成部分按从大到小的顺序排列:年、月、日、时、分、秒[1]nbsp#342010-10-01nbsp20:10:00nbspUTC#34gtnbspparse_datetime(#3420101010#34)[1]nbsp#342010-10-10nbspUTC#34parse_date(): 接受 4 位数的年份 yyyy-mm-dd 或 yyyy/mm/dd
gtnbspparse_date(#342010-10-01#34)[1]nbsp#342010-10-01#34parse_time(): 接受格式 hh:mm(:ss am/pm)
gtnbspparse_time(#3401:10nbspam#34)01:10:00gtnbspparse_time(#3420:10:01#34)20:10:01
如果这些默认值不适用于您的数据,您可以提供自己的日期时间格式,由以下几部分组成
Year
%Y : 4 位数字%y : 2 位数字 00-69 -gt 2000-2069, 70-99 -gt 1970-1999Month
%m : 2 位数字%b : 简写, 如 Jan%B : 全称, 如 JanuaryDay
%d : 2 位数字%e : 可选的前导空格Time
%H : 0-23 小时%I : 0-12 小时, 必须包含 %p%p : AM/PM%M : 分钟%S : 整数秒数%OS: 实数秒数%Z : 时区%z : 相对于 UTC 的偏移, 如 +0800Non-digits
%. : 跳过一个非数字字符% : 跳过任意个非数字字符示例
gtnbspparse_date(#3401/02/15#34,nbsp#34%m/%d/%y#34)[1]nbsp#342015-01-02#34gtnbspparse_date(#3401/02/15#34,nbsp#34%d/%m/%y#34)[1]nbsp#342015-02-01#34gtnbspparse_date(#3401/02/15#34,nbsp#34%y/%m/%d#34)[1]nbsp#342001-02-15#34
如果 %B 或 %b 使用的是非英语的月份名,你需要用 locale() 设置语言。
详情参见 date_names_langs() 中的内置语言列表,或者如果没有包含你的语言,可以用 date_names() 创建你自己的语言
gtnbspparse_date(#341nbspjanviernbsp2015#34,nbsp#34%dnbsp%Bnbsp%Y#34,nbsplocalenbsp=nbsplocale(#34fr#34))[1]nbsp#342015-01-01#34
,是上节的思考练习。是一位读者写的,我发出来给大家参考参考
( ̄▽ ̄)~
http://note.youdao.com/s/Ls1QE1oN
r语言处理空间数据 r语言进行空间数据处理