stringr
是tidyverse
系列包中专门用于文本处理的工具包,其中字符串处理的函数均遵循str_*
的命名方式。
library(stringr)
本篇先简单介绍部分str_*()
系列函数。
words
是该包自带的数据集,其中包含了980个英文单词。本篇从中选取三个单词作为示例数据:
(word3 <- words[c(9, 98, 980)])
## [1] "act" "blow" "young"
字符串长度
str_length()
函数用于计算字符串的长度(包含空格);若为字符串向量,则分别计算各元素的长度。
str_length(string)
示例如下:
str_length(word3)
## [1] 3 4 5
str_length(" A B C")
## [1] 6
连接字符串
str_c()
和str_flatten()
函数用于连接字符串。语法结构如下:
str_c(..., sep = "", collapse = NULL)
str_flatten(string, collapse = "")
sep:连接符号;在连接多个字符串时使用;
collapse:连接符号;在连接字符串向量中的元素时使用;
str_flatten()
函数只有collapse
参数,只能用于连接字符串向量的元素。
连接多个字符串:
str_c(word3[1], word3[2], word3[3],
sep = "-")
## [1] "act-blow-young"
str_c(word3[1], word3[2], word3[3],
collapse = "-") # 不起作用
## [1] "actblowyoung"
上述例子中连接的是多个字符串,因此
collapse
参数不起作用;
sep
参数的默认状态为不使用连接符号,因此第二行代码的输出结果为actblowyoung
。
连接字符串向量的元素:
str_c(word3, sep = "-") # 不起作用
## [1] "act" "blow" "young"
str_c(word3, collapse = "-")
## [1] "act-blow-young"
str_flatten(word3, "-")
## [1] "act-blow-young"
sep
参数在连接字符串向量的元素时不起作用;由于str_c()
函数的collapse
参数默认值为NULL,因此第一行代码实际上没有进行连接;
str_flatten()
函数的collapse
在第二个位置上,调用时可省略参数名。
字符串向量的元素排序
str_order()
函数仅返回每个元素的序号,不执行排序操作;str_sort()
执行排序操作。语法结构如下:
str_order(x, decreasing = FALSE,
na_last = TRUE, locale = "en",
numeric = FALSE, ...)
str_sort(x, decreasing = FALSE,
na_last = TRUE, locale = "en",
numeric = FALSE, ...)
x:字符串向量;
decreasing:逻辑型参数;是否降序,默认为否;
na_last:TRUE表示将缺失值放置在结尾,FALSE表示放置在开头,NA表示删除缺失值;
locale:字符串的语言类型,默认为英语(en);
numeric:是否按数值排序,默认为否。
txt <- c(NA, "123", word3)
str_order(txt)
## [1] 2 3 4 5 1
str_sort(txt)
## [1] "123" "act" "blow" "young" NA
str_sort(txt, na_last = F)
## [1] NA "123" "act" "blow" "young"
str_sort(txt, na_last = NA)
## [1] "123" "act" "blow" "young"
大小写转换
str_to_upper()
函数将字符串全部转为大写字母;str_to_lower()
函数全部转为小写字母;str_to_title()
函数将字符串的每个单词的首字母转为大写,其余转为小写;str_to_sentence()
函数将字符串首字母大写,其余转为小写。语法结构如下:
str_to_upper(string, locale = "en")
str_to_lower(string, locale = "en")
str_to_title(string, locale = "en")
str_to_sentence(string, locale = "en")
示例如下:
str_to_upper("welcome")
## [1] "WELCOME"
str_to_lower("weLCome")
## [1] "welcome"
str_to_title("welcome to Rstudier")
## [1] "Welcome To Rstudier"
str_to_sentence("welcome to Rstudier")
## [1] "Welcome to rstudier"
删除空格
str_trim()
函数用于删除字符串首、尾(可选)的空格;str_squish()
函数除删除首、尾空格(不可选)外,还会删除内部多余的空格。语法结构如下:
str_trim(string, side = c("both", "left", "right"))
str_squish(string)
side:both表示同时删除首、尾空格;left表示仅删除开头空格;right表示仅删除结尾空格。
str_trim(" wel come to Rstudier ", side = "left")
## [1] "wel come to Rstudier "
str_squish(" wel come to Rstudier ")
## [1] "wel come to Rstudier"
上述例子中
wel come
内部有两个空格,第二行代码的输出结果将其删除了一个;删除内部空格可以使用
st_remove()
函数根据模式匹配进行删除,详见下篇。
提取字符串的部分
str_sub()
函数可以根据起、始位置提取字符串的部分。语法结构如下:
str_sub(string, start = 1L, end = -1L)
str_sub(string, start = 1L, end = -1L,
omit_na = FALSE) <- value
示例如下:
x <- "welcome to Rstudier"
str_sub(x, 4, 12)
## [1] "come to R"
str_sub(x, 4, 12) <- "U"; x
## [1] "welUstudier"
str_extract()
函数可以根据模式匹配进行提取,详见下篇。
其他
str_pad()
函数通过width
参数设置字符串的最短长度,不足的通过pad
参数补充,side
参数控制补充的位置。语法结构如下:
str_pad(string, width, side = c("left", "right", "both"),
pad = " ")
示例如下:
str_pad(word3, width = 6, side = "both",
pad = "-")
## [1] "-act--" "-blow-" "young-"
str_trunc()
参数通过width
参数设置字符串的最大长度,多余部分使用ellipsis
参数的内容代替(默认为...
)。语法结构如下:
str_trunc(string, width, side = c("right", "left", "center"),
ellipsis = "...")
示例如下:
str_trunc(word3, width = 4, side = "right")
## [1] "act" "blow" "y..."
str_dup()
函数可以重复字符串,重复次数由times
参数控制。语法结构如下:
str_dup(string, times)
示例如下:
str_dup(word3, times = 3)
## [1] "actactact" "blowblowblow" "youngyoungyoung"