r语言tidyverse教程:5 字符串处理stringr

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录

R语言系列

stringrtidyverse的字符串处理函数和R语言原生的字符串处理函数相比其API风格统一功能完备十分推荐使用

功能函数
拼接与分割str_cstr_split, str_split_fixed
定位匹配提取str_locatestr_matchstr_extract
删除替换str_removestr_replace
检测计数str_detectstr_count
格式化str_glue
头尾修饰补齐str_pad删除str_trim, str_squish
大小写转换str_to_lower, str_to_upper, str_to_title, str_to_sentence
复制str_dup
排序str_sort, str_order
截取str_sub, str_subset, str_which
字符串长度str_length

拼接与分割

str_c为字符串拼接函数可以拼接字符和字符数组关键字collapse为折叠符用于连接数组内的字符sep为分隔符用于连接数组间或者字符串间的字符。

library(stringr)

str_c("a","b")    # 返回 ab

# 下面三个均返回a_b
str_c("a","b",sep = "_")
str_c(c("a"), c("b"), sep="_")
str_c(c("a","b"), collapse="_")


# 返回a/c_b/d
str_c(c("a","b"),c("c","d"),sep = "/",collapse = "_")

分割函数有两个str_splitstr_split_fixed后者可以指定分割块数。参数pattern表示分隔符当pattern=""时将字符串分割成单个字符。通过simplify可指定返回的数据类型T返回矩阵。

# 字符分割"b" "a" "n" "a" "n" "a"
str_split("banana", "")

# 字符分割返回矩阵
str_split("banana","a",simplify = T)

"返回值如下
     [,1] [,2] [,3] [,4]
[1,] "b"  "n"  "n"  ""  
"

# 指定分割块数
str_split_fixed("banana", "", n = 3)

##      [,1] [,2] [,3]  
## [1,] "b"  "a"  "nana"

检测计数

str_count用于计数str_detect用于检测二者的区别在于检测只返回TRUE或者FALSE计数则在此之上返回具体个数

# 单个目标字符计数返回1 1 0
str_count(string = c("sql","json","java"),pattern = "s")

# 多个目标字符计数 返回1 1 2
str_count(string = c("sql","json","java"),pattern = c("s","j","a"))

# 元字符查找计数fixed包裹元字符 返回2
str_count(string = "a..b",pattern = fixed("."))

str_detect(string = c("sql","json","java"),pattern = "s")
## 返回 TRUE  TRUE FALSE

定位、提取、匹配、删除、替换

定位、提取、匹配的操作逻辑是相似的区别在于返回值定位返回的是匹配字符的位置提取和匹配则返回匹配值。而删除和替换功能则必须基于匹配、定位的基础上。这四种功能均有两种实现后面带有_all的表示返回所有匹配否则只匹配第一个。

定位str_locatestr_locate_all
提取str_extractstr_extract_all
匹配str_matchstr_match_all
删除str_removestr_remove_all
替换str_replacestr_replace_all

此外替换还有一个简单的str_replace_na函数用于将NA替换成字符串"NA"

# 定位
> str_locate_all("banana", "an")

# [[1]]
#      start end
# [1,]     2   3
# [2,]     4   5


# 匹配
str_match_all("banana", "an")

# [[1]]
#     [,1]
# [1,] "an"
# [2,] "an"

# 提取
str_extract_all("banana", "an")

## [[1]]
## [1] "an" "an"

# 提取返回矩阵
str_extract_all("banana", "an", simplify = T)
#      [,1] [,2]
# [1,] "an" "an"

# 删除 返回"ba"
str_remove_all("banana", "an")

# 替换 返回bANANa"
str_replace_all("banana", "an", "AN")

格式化

尽管字符串格式化函数只有str_glue但头尾修饰、大小写转换也可以理解为一种格式化方案所以归类在一起。

其中str_glue的逻辑是识别字符串中的{}并将花括号中的内容理解为变量然后将变量转换为字符串是很现代的处理方法

name <- "jack"
age <- 12
str_glue("I'm {name}, {age} years old.")
# 返回I'm jack, 12 years old.

str_pad可在字符串的左右两侧添加单个字符str_trim可删除左右两侧的空格str_squish可删除字符串中多余的空格。

# 默认字符串左边补齐 width用于指定宽度 返回"00114514"
str_pad(string = "114514", width = 8, pad = "0")

# 字符串右边补齐 返回"114514xx"
str_pad("114514", 8, side = "right", pad = "x")

str_pad("114514", 8, "both", "0") # 返回01145140

str_trim("  I'm   jack  ")    # 返回 "I'm   jack"
str_squish("  I'm   jack  ")  # 返回 "I'm jack"

大小写转换语句中str_to_title会将所有单词首字母转大写其他字母小写str_to_sentence则只将句首第一个字母转为大写其他字母小写。

stringr包中其他的有用函数用于常见的字符处理。

# 字符转为小写
str_to_lower("I'm jack")  # 返回 "i'm jack"
str_to_upper("I'm jack")  # 返回 "I'M JACK"
str_to_title("I'm jack")  # 返回 "I'm Jack"
str_to_sentence("I'm Jack") # 返回 "I'm jack"

其他函数

str_sort返回排序后的字符串数组str_order则返回排序后的索引向量。排序函数默认升序若将decreasing设为TRUE则采用降序

# 降序排序返回"sql"    "python" "json"
str_sort(c("sql","json","python"), decreasing = TRUE)

# 升序排序返回索引向量 2 3 1
str_order(c("sql","json","pythn"))

str_sub通过指定开始和结束位置得到子串当索引值为正时表示正数为负数表示倒数。str_subset, str_which则通过匹配模式过滤出满足模式的字符串。

# 字符过滤 从第1个到倒数第2个 返回 banan
str_sub("banana", start = 1,end = -2)

# 字符串过滤 ^s为正则表达式语法表示是开头 返回 sql
str_subset(string = c("java","sql","python"),pattern = "^s")

# 字符串过滤返回匹配字符串位置  返回2
str_which(string = c("java","sql","python"),pattern = "^s")

str_dup可将字符向量重复若干次并返回重复后的字符向量。

str_dup(c("I", "m", "jack"),times = 2)

## [1] "II"       "mm"       "jackjack"

str_length可以返回字符串长度

str_length("banana") # 返回 6
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6