作者简介Introduction

数据匠(baidao.net):http://www.baidao.net/

往期回顾

谈谈R中的乱码(一)

谈谈R中的乱码(二)

前面讲过,R 中字符向量可以有多种编码。一般情况下,对于混合编码,R 都能很好的自动处理。例如:

x1 <- '中国'
x2 <- iconv(x1, 'GB2312', 'UTF-8')
## == 判断也没问题
x2 == '中国'
## [1] TRUEx <- c(x1, x2)
grep('中', x)
## [1] 1 2
grep(iconv('中', 'GB2312', 'UTF-8'), x)
## [1] 1 2

在写命令时,无需特意为了目标字符将匹配条件转为相应的编码,R 自动就在后台做了转换。然而,总有些让人意想不到的角落,例如:

a1 <- iconv('中文 aa', 'gb2312', 'UTF-8')
Encoding(a1)
## [1] "UTF-8"# 当待替换字符非 UTF-8 编码,替换字符为 UTF-8 编码,结果乱码
(r1 <- sub('aa', a1, 'aa ba'))
## [1] "涓枃 aa ba"
Encoding(r1)
## [1] "unknown"
# 需要手工纠正
Encoding(r1) <- 'UTF-8'
r1
## [1] "中文 aa ba"(r2 <- sub('aa', a1, 'aa ba', useBytes = F, fixed = T))
## [1] "涓枃 aa ba"
Encoding(r2)
## [1] "unknown"
Encoding(r2) <- 'UTF-8'
r2## [1] "中文 aa ba"

在线帮助里是这么写的:

嗯,这是少数几处帮助文本与实际情况脱离的个例。

待替换字符为 UTF-8 编码,倒是没有问题:

sub('aa', 'bb', a1, fixed = F)
## [1] "中文 bb"

如果是我们自己写的代码,可以小心谨慎,避免跳坑,很容易就能找到替代方案。博主随便列举一下,就有两种:

方式一:坚持极简主义不用第三方包,使用正则表达式之动力引擎 regexpr() 进行替换

s <- 'aa ba'
m <- regexpr('aa', s)
regmatches(s, m) <- a1
s
## [1] "中文 aa ba"

方式二:用包也不羞耻之 stringr 包

library(stringr)
str_replace('aa', 'aa', a1)
## [1] "中文 aa"
str_replace(a1, 'aa', '+')
## [1] "中文 +"

但是 sub() 和 gsub() 作为R的基础函数,在大量的包中广泛存在,怎么避免让这些包跳坑呢?

本来还想介绍一个与混合编码有关的奇葩案例(来自性能无敌的 data.table 包),但是实在太奇葩了,所以今天就提前收尾吧。

替第四篇做个预告。用过 tm 包的童鞋想必经常碰到为什么 tm 包里词都连起来了? 这样的问题。问题就出在 scan() 这个基础函数(怎么又是基础函数!)。scan() 是R中用来拆分文本的函数,读取文本数据(read.table())都要用。我记得以前是正常的,但不记得是哪个R版本升级之后,就变成下面这样了,“的”和“分词”被当作了同一个词。scan()的这个奇葩结果就是中文文本分了词让 tm 建矩阵结果还是分的乱七八糟的原因。

x = '测试 中文 的 分词'
scan(text = x, what='', sep=' ')
## [1] "测试"    "中文"    "的 分词"
 往期精彩内容整理合集 

2017年R语言发展报告(国内)

R语言中文社区历史文章整理(作者篇)

R语言中文社区历史文章整理(类型篇)

公众号后台回复关键字即可学习

回复 R                  R语言快速入门及数据挖掘 
回复 Kaggle案例  Kaggle十大案例精讲(连载中)
回复 文本挖掘      手把手教你做文本挖掘
回复 可视化          R语言可视化在商务场景中的应用 
回复 大数据         大数据系列免费视频教程 
回复 量化投资      张丹教你如何用R语言量化投资 
回复 用户画像      京东大数据,揭秘用户画像
回复 数据挖掘     常用数据挖掘算法原理解释与应用
回复 机器学习     人工智能系列之机器学习与实践
回复 爬虫            R语言爬虫实战案例分享

点击"阅读原文",更多精彩等着你!


谈谈R中的乱码(三)相关推荐

  1. linux rstudio 中文乱码,谈谈R中的乱码(一)

    原标题:谈谈R中的乱码(一) baidao:个人博客: 数据匠:http://www.baidao.net/ 在R教学中,首先要跨过去的一座大山就是乱码问题.很多学生在装好R和RStudio之后,刚刚 ...

  2. 谈谈C#中的三个关键词new , virtual , override

    谈谈C#中的三个关键词new , virtual , override C#支持单继承,说到继承就不得不说new,virtual和override这三个关键词,灵活正确的使用这三个关键词,可以使程序结 ...

  3. R实战| PCA、tSNE、UMAP三种降维方法在R中的实现

    降维 在组学分析中,一般通过降维算法得到低纬度如二维或三维的新坐标数据,再结合可视化技术去展示样本的在新坐标的空间分布,接着加上统计检验结果证实整体组学水平上组间的差异性.降维算法有基于线性模型的PC ...

  4. r导入txt乱码_R学习笔记系列—R语言从文本和Excel文件中读取数据-excel打开是乱码...

    1.4.1 从文本文件中导入数据 可以使用 read.table() 函数从带分隔符的文本文件中导入数.调用格式为: 这个函数看上去很复杂,但其实很多参数在使用时不用明确指出来,使用默认值可以满足绝大 ...

  5. r library car_第三十九讲 R语言-线性回归:自变量中存在分类变量时

    当我们提到"线性"回归时,特指的是因变量(结果变量)为连续性变量,与自变量(预测变量)有线性关系,而对自变量(预测变量)并没有要求一定要是连续性变量.前面我们已经提到,当自变量是连 ...

  6. 闪亮蔚蓝_在R中构建第一个闪亮的Web应用

    闪亮蔚蓝 数据科学 (DATA SCIENCE) Do you want to make your R code publicly available for others to use? If yo ...

  7. 网页中出现乱码,该如何处理?

    上网时经常遇到这样一个问题,那就是打开一个网页后发现里面全是"看不明白是什么文字的内容"或"不知道写了什么的内容",我们把这些统称为乱码.下面我说一下如何处理乱 ...

  8. Linux 过滤文件中的乱码

    前言 这写命令都不常用,但是需要用的时候又特别需要,整理一遍,先收藏一波 一.过滤文件中的乱码 grep -rnP "[^[:ascii:]]" file 二.win文件换成lin ...

  9. 谈谈分布式系统中的复制

    谈谈分布式系统中的复制 数据极客  2016-04-01 23:16 复制几乎是构成分布式系统,尤其是分布式存储和分布式数据库的关键所在,那么本文就来综合谈论下复制技术. 简单说复制本身可以分为同步复 ...

  10. 简单介绍一下R中的几种统计分布及常用模型

    统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...

最新文章

  1. 一套cms内容网站发布系统
  2. python字典在编程中的作用_python中的字典操作及字典函数
  3. 关于“H5小游戏源代码如何转换微信小游戏发布”
  4. 10款微信公众平台相关的开源软件
  5. PLC中忘记cpu密码怎么办?
  6. 编程学习网站 收集于网络
  7. OneDrive配合OneIndex搭建自用网盘
  8. Chainlink官方文档翻译(二) 中间件-随机数 Intermediates - Random Numbers)
  9. 赵小楼《天道》《遥远的救世主》深度解析(81)一个不愿躺着对话的女人,应给与绝对尊严,这符合强势文化范畴
  10. rpa打开浏览器_从RPA+AI到 RPA像人一样思考:来也科技发布新产品 UiBot Mage
  11. SAP中MRP控制者的应用理解
  12. mount point / 挂载点
  13. IAR for ARM系列教程(三)_菜单(Ⅰ)
  14. java 椭圆焦点 求是否在圆内_椭圆焦点位置的确定
  15. 商科转码之路 | 算法岗寒假实习面经
  16. 小游戏 (最少线段连线问题)
  17. 小程序游戏开发有哪些游戏引擎可以选择?
  18. vue项目让局域网ip访问配置设置
  19. Echarts legend属性使用
  20. Akamai发布《互联网现状》报告,亚太恶意DNS攻击剧增

热门文章

  1. 在 for 循环里写加号拼接字符串的那个同事,不见了~
  2. MySQL 百万级数据,怎么做分页查询?
  3. 再见 FTP/SFTP!是时候拥抱下一代文件传输利器 Croc 了!
  4. 链家程序员怒删 9TB 数据,被判 7 年!
  5. 华为、阿里、京东停止社招转外包:头部公司们的谋局
  6. Instagram: 用Django服务30亿用户
  7. 再送 5000 份红包封面!
  8. 以产品思维去做微信公众号
  9. SDOI2017 树点涂色
  10. 前端程序员也需要知道进程和线程