R for data science 之 stringr包

2018 年 2 月 3 日 R语言中文社区 邬书豪



作者简介Introduction

邬书豪,车联网数据挖掘工程师 ,R语言中文社区专栏作者。微信ID:wsh137552775

知乎专栏:https://www.zhihu.com/people/wu-shu-hao-67/activities


往期回顾

R for data science之purrr包(上)

R for data science之purrr包(下)

R可视化分析美国的肥胖症,嘿!

stringr包常用函数总结

stringr包是伟大的Hadley Wickham开发的处理字符串的程序包,该包包含的函数如下图:


这篇文章我会给大家举例讲解其中的几个常用函数,如果大家想详细的了解每个函数的具体用法,可以使用帮助函数help()去查看。

一、初识字符串

字符串是几乎在所有编程语言中可以实现的非常重要和有用的数据类型。下面给大家在R中去展示的字符串:

str1 <- 'Wu shuhao'
str2 <- '邬书豪'
str3 <- '《Kaggle十大案例精讲》'
str4 <- 'https://edu.hellobi.com/course/240'
str1; str2; str3; str4
class(str1)


上面的代码中,我们首先创建了四个字符串,分别是str1、str2...。然后我们分别输出这四个字符串,顺便使用class函数查看了其类别,返回“character”。


二、处理字符串的常用操作

对字符串的常用操作包括:获取字符串长度、获取字符串中某些字符的个数、字符串的拼接、拆分、匹配、替换、格式化字符串。

## 获取字符串长度

首先使用base包里面的nchar函数计算其长度,然后使用stringr包中的str_length函数和str_count函数计算字符串长度。

nchar(str1)
nchar(c(str2, str3, str4))

library(stringr)
str_length(str1)
str_length(c(str2, str3, str4))

str_count(str1)
str_length(c(str2, str3, str4))

## 对比nchar和str_length函数的计算速度
system.time(nchar(rep(c(str2, str3, str4), 1000000)))
system.time(str_length(rep(c(str2, str3, str4), 1000000)))


通过上面的对比,大家可能会有一个疑问:为什么stringr中的str_length和str_count函数的作用都是计算字符串的长度?实际上str_length函数的作用就是计算其长度,但是str_count函数还有其他的作用,即统计指定字符的个数。通过上面三个函数的计算速度对比,大家也就知道那个函数在计算字符串长度时效率高了。


## 计算字符串中某类字符的个数

在这种情况下,经常使用正则表达式去进行匹配。(正则表达式可以去百度搜索,由于比较多,我就不截图占篇幅了。)

str_count(str1, '[A-Z]')  # 计算大写字母的个数
str_count(str1, '[a-z]')  # 计算小写字母的个数
str_count(str4, '[0-9]')  # 计算数字的个数
str_count(str4, '\\d')    # 计算数字的个数
str_count(str4, '\\W')    # 计算任意非数字、大小写字母和下划线的个数

## 字符串拼接

paste(str3, str4)
paste(str2, str3, sep = ': ')
paste(rep(str2, 2), rep(str3, 2), sep = ':', collapse = ';  ')

str_c(str3, str4)
str_c(str2, str3, sep = ': ')
str_c(rep(str2, 2), rep(str3, 2), sep = ':', collapse = ';  ')


我们同样是使用了base包里面的paste函数和str_c函数进行字符串拼接的对比,用法一样。不过没有做批量的拼接对比,实际上结果是和上面的计算长度一致,批量处理时,stringr包里面的函数销量高。


## 字符串拆分

str_split(str4, '\\W', simplify = T)  # 按照标点符号拆分字符串,返回矩阵
str_split_fixed(str4, '\\W', 2)       # 按照标点符号拆分字符串,指定拆分为2部分



## 字符串匹配

str_extract(str4, '[0-9]+')       # 匹配字符串中的数字
str_sub(str3, 2, 13)              # 匹配字符串中某个具体未知的字符
str_sub(str3, 2, -2)              # 同上
str5 <- c("apple", "banana", "pear", "persimmon", "pinapple")
str_subset(str5, "a")             # 匹配字符串中包括‘a’的字符串
str_subset(str5, "^a")            # 匹配字符串中开头是‘a’的字符串
str_subset(str5, "a$")            # 匹配字符串中结尾是‘a’的字符串
str_locate(str4, 'com')           # 匹配字符串中指定字符的位置



## 字符串替换

str_replace(str1, 'Wu', 'wu')       # 匹配“Wu”,替换为“wu”
str_replace_all(str3, '[《》]', '')  # 匹配“《》”,替换为“”(空)



## 格式化字符串

str_to_lower(str1)               # 将所有的字符转换为小写
str_to_upper(str1)               # 将所有的字符转换为大写
str_to_title(str1)               # 将所有的字符转换为标题格式
str_to_title('this is a string') # 将所有的字符转换为标题格式


今天就写这点吧,还有很多字符串处理的函数。stringr包里面的各种处理字符串的函数的效率比较高,建议多尝试使用




 往期精彩内容整理合集 

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

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

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

相关课程推荐


Kaggle十大案例精讲课程(连载中)

☟☟☟ 戳阅读原文,即刻加入课程。

登录查看更多
0

相关内容

Python地理数据处理,362页pdf,Geoprocessing with Python
专知会员服务
113+阅读 · 2020年5月24日
Python分布式计算,171页pdf,Distributed Computing with Python
专知会员服务
107+阅读 · 2020年5月3日
【新书】Python数据科学食谱(Python Data Science Cookbook)
专知会员服务
114+阅读 · 2020年1月1日
【电子书推荐】Data Science with Python and Dask
专知会员服务
43+阅读 · 2019年6月1日
将Python用于NLP:Pattern 库简介
Python程序员
15+阅读 · 2019年6月7日
PyTorch & PyTorch Geometric图神经网络(GNN)实战
专知
81+阅读 · 2019年6月1日
实战 | 用Python做图像处理(三)
七月在线实验室
15+阅读 · 2018年5月29日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
推荐|2017年最受数据科学欢迎的Top15个Python库!
全球人工智能
8+阅读 · 2017年10月28日
Python3爬虫之入门和正则表达式
全球人工智能
7+阅读 · 2017年10月9日
Highway Networks For Sentence Classification
哈工大SCIR
4+阅读 · 2017年9月30日
MATLAB人工神经网络教程
七月在线实验室
8+阅读 · 2017年9月6日
From Softmax to Sparsemax-ICML16(1)
KingsGarden
72+阅读 · 2016年11月26日
Arxiv
22+阅读 · 2019年11月24日
Visualizing and Measuring the Geometry of BERT
Arxiv
7+阅读 · 2019年10月28日
Learning Recommender Systems from Multi-Behavior Data
Arxiv
7+阅读 · 2018年11月29日
Arxiv
6+阅读 · 2018年7月12日
The Matrix Calculus You Need For Deep Learning
Arxiv
12+阅读 · 2018年7月2日
Arxiv
3+阅读 · 2018年6月18日
Arxiv
8+阅读 · 2018年5月15日
Arxiv
3+阅读 · 2018年3月2日
Arxiv
8+阅读 · 2018年1月19日
VIP会员
相关资讯
将Python用于NLP:Pattern 库简介
Python程序员
15+阅读 · 2019年6月7日
PyTorch & PyTorch Geometric图神经网络(GNN)实战
专知
81+阅读 · 2019年6月1日
实战 | 用Python做图像处理(三)
七月在线实验室
15+阅读 · 2018年5月29日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
推荐|2017年最受数据科学欢迎的Top15个Python库!
全球人工智能
8+阅读 · 2017年10月28日
Python3爬虫之入门和正则表达式
全球人工智能
7+阅读 · 2017年10月9日
Highway Networks For Sentence Classification
哈工大SCIR
4+阅读 · 2017年9月30日
MATLAB人工神经网络教程
七月在线实验室
8+阅读 · 2017年9月6日
From Softmax to Sparsemax-ICML16(1)
KingsGarden
72+阅读 · 2016年11月26日
相关论文
Arxiv
22+阅读 · 2019年11月24日
Visualizing and Measuring the Geometry of BERT
Arxiv
7+阅读 · 2019年10月28日
Learning Recommender Systems from Multi-Behavior Data
Arxiv
7+阅读 · 2018年11月29日
Arxiv
6+阅读 · 2018年7月12日
The Matrix Calculus You Need For Deep Learning
Arxiv
12+阅读 · 2018年7月2日
Arxiv
3+阅读 · 2018年6月18日
Arxiv
8+阅读 · 2018年5月15日
Arxiv
3+阅读 · 2018年3月2日
Arxiv
8+阅读 · 2018年1月19日
Top
微信扫码咨询专知VIP会员