R for data science 之 stringr包

浏览: 2129

stringr包常用函数总结

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

1.jpg2.jpg

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

一、初识字符串

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

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

3.jpg

上面的代码中,我们首先创建了四个字符串,分别是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)))

4.jpg

通过上面的对比,大家可能会有一个疑问:为什么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 = '; ')

5.jpg

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


## 字符串拆分

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

6.jpg


## 字符串匹配

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') # 匹配字符串中指定字符的位置

7.jpg


## 字符串替换

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

8.jpg


## 格式化字符串

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

9.jpg

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

推荐 2
本文由 邬书豪 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册