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


    R语言系列:

    stringr

    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 = "_")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    分割函数有两个,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"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    检测计数

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

    定位、提取、匹配的操作逻辑是相似的,区别在于返回值,定位返回的是匹配字符的位置;提取和匹配则返回匹配值。而删除和替换功能则必须基于匹配、定位的基础上。这四种功能均有两种实现,后面带有_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")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    格式化

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

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

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

    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"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    大小写转换语句中,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"
    
    • 1
    • 2
    • 3
    • 4
    • 5

    其他函数

    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"))
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

    str_dup(c("I", "m", "jack"),times = 2)
    
    ## [1] "II"       "mm"       "jackjack"
    
    • 1
    • 2
    • 3

    str_length可以返回字符串长度

    str_length("banana") # 返回 6
    
    • 1
  • 相关阅读:
    Docker 安装及常用命令
    Linux下打开ISO文件两种方法
    金仓数据库 KingbaseES V8.3至V8.6迁移最佳实践(2. KingbaseES V8.3和 V8.6 兼容性)
    ES6中set()和map()数据结构
    【Android】settings命令幕后-----cmd命令
    云原生专题-k8s基础系列-k8s-namespaces详解
    人在国企,年薪30w,每天工作1小时,觉得没意思,要不要走?
    Vim扩展内容
    SpringBoot实现动态数据源配置
    linux驱动下半部之tasklet
  • 原文地址:https://blog.csdn.net/m0_37816922/article/details/130360398