1. stringr介绍
stringr包被定义为一致的、简单易用的字符串工具集。所有的函数和参数定义都具有一致性,比如,用相同的方法进行NA处理和0长度的向量处理。
字符串处理虽然不是R语言中最主要的功能,却也是必不可少的,数据清洗、可视化等的操作都会用到。对于R语言本身的base包提供的字符串基础函数,随着时间的积累,已经变得很多地方不一致,不规范的命名,不标准的参数定义,很难看一眼就上手使用。字符串处理在其他语言中都是非常方便的事情,R语言在这方面确实落后了。stringr包就是为了解决这个问题,让字符串处理变得简单易用,提供友好的字符串操作接口。
stringr的项目主页:https://cran.r-project.org/web/packages/stringr/index.html
2. stringr的API介绍
stringr包1.0.0版本,一共提供了30个函数,方便我们对字符串处理。常用的字符串的处理以str_开头来命名,方便更直观理解函数的定义。我们可以根据使用习惯对函数进行分类:
字符串拼接函数
- str_c: 字符串拼接。
- str_join: 字符串拼接,同str_c。
- str_trim: 去掉字符串的空格和TAB(\t)
- str_pad: 补充字符串的长度
- str_dup: 复制字符串
- str_wrap: 控制字符串输出格式
- str_sub: 截取字符串
- str_sub<- 截取字符串,并赋值,同str_sub
字符串计算函数
- str_count: 字符串计数
- str_length: 字符串长度
- str_sort: 字符串值排序
- str_order: 字符串索引排序,规则同str_sort
字符串匹配函数
- str_split: 字符串分割
- str_split_fixed: 字符串分割,同str_split
- str_subset: 返回匹配的字符串
- word: 从文本中提取单词
- str_detect: 检查匹配字符串的字符
- str_match: 从字符串中提取匹配组。
- str_match_all: 从字符串中提取匹配组,同str_match
- str_replace: 字符串替换
- str_replace_all: 字符串替换,同str_replace
- str_replace_na:把NA替换为NA字符串
- str_locate: 找到匹配的字符串的位置。
- str_locate_all: 找到匹配的字符串的位置,同str_locate
- str_extract: 从字符串中提取匹配字符
- str_extract_all: 从字符串中提取匹配字符,同str_extract
字符串变换函数
- str_conv: 字符编码转换
- str_to_upper: 字符串转成大写
- str_to_lower: 字符串转成小写,规则同str_to_upper
- str_to_title: 字符串转成首字母大写,规则同str_to_upper
参数控制函数,仅用于构造功能的参数,不能独立使用。
- boundary: 定义使用边界
- coll: 定义字符串标准排序规则。
- fixed: 定义用于匹配的字符,包括正则表达式中的转义符
- regex: 定义正则表达式
stringr
包中的重要函数
函数 |
功能说明 |
R Base中对应函数 |
使用正则表达式的函数 |
|
|
str_extract() |
提取首个匹配模式的字符 |
regmatches() |
str_extract_all() |
提取所有匹配模式的字符 |
regmatches() |
str_locate() |
返回首个匹配模式的字符的位置 |
regexpr() |
str_locate_all() |
返回所有匹配模式的字符的位置 |
gregexpr() |
str_replace() |
替换首个匹配模式 |
sub() |
str_replace_all() |
替换所有匹配模式 |
gsub() |
str_split() |
按照模式分割字符串 |
strsplit() |
str_split_fixed() |
按照模式将字符串分割成指定个数 |
- |
str_detect() |
检测字符是否存在某些指定模式 |
grepl() |
str_count() |
返回指定模式出现的次数 |
- |
其他重要函数 |
|
|
str_sub() |
提取指定位置的字符 |
regmatches() |
str_dup() |
丢弃指定位置的字符 |
- |
str_length() |
返回字符的长度 |
nchar() |
str_pad() |
填补字符 |
- |
str_trim() |
丢弃填充,如去掉字符前后的空格 |
- |
str_c() |
连接字符 |
paste(),paste0() |
3.1 字符串拼接函数
3.1.1 str_c,字符串拼接操作,与str_join完全相同,与paste()行为不完全一致。
函数定义:
str_c(..., sep = "", collapse = NULL)
str_join(..., sep = "", collapse = NULL)
参数列表:
…: 多参数的输入
sep: 把多个字符串拼接为一个大的字符串,用于字符串的分割符。
collapse: 把多个向量参数拼接为一个大的字符串,用于字符串的分割符。
str_c(c('a','a1'),c('b','b1'),sep='-')
str_c(letters[1:5], " is for", "...")
str_c('a','b',sep='-')#sep可设置连接符
str_c('a','b',collapse = "-") # collapse参数,对多个字符串无效
str_c(c('a','a1'),c('b','b1'),collapse='-')
str_c(head(letters), collapse = "") #把多个向量参数拼接为一个大的字符串
str_c(head(letters), collapse = ", ")
str_c(letters[-26], " comes before ", letters[-1])
str_c(letters)
############
#对比str_c()函数和paste()函数之间的不同点。
############
str_c('a','b') #把多个字符串拼接为一个大的字符串。
paste('a','b') # 多字符串拼接,默认的sep参数行为不一致
# 向量拼接字符串,collapse参数的行为一致
str_c(letters, collapse = "") #collapse 将一个向量的所有元素连接成一个字符串,collapse设置元素间的连接符
paste(letters, collapse = "")
#拼接有NA值的字符串向量,对NA的处理行为不一致
str_c(c("a", NA, "b"), "-d") #若为空,则无法连接
paste(c("a", NA, "b"), "-d") #即使空,也可连接
str_c(str_replace_na(c("a", NA, "b")), "-d") #即使空,也可连接
3.1.2 str_trim:去掉字符串的空格和TAB(\t)
函数定义:str_trim(string, side = c("both", "left", "right"))