您的位置:首页 > 其它

R for data science 之 stringr包

2018-02-03 00:00 447 查看


作者简介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)       # 按照标点符号拆分字符串,指定
b4c2
拆分为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十大案例精讲课程(连载中)


☟☟☟ 戳阅读原文,即刻加入课程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: