美文网首页
49.关于字符串的基础知识和一些字符串操作函数

49.关于字符串的基础知识和一些字符串操作函数

作者: 心惊梦醒 | 来源:发表于2021-09-01 00:05 被阅读0次

    【上一篇:48.关于Set Operations-集合操作函数】
    【下一篇:50.关于正则表达式的基础知识】

    字符串基础

        1. 字符串的创建必须用单引号或者双引号,两者作用相同
        2. 特例是:如果字符串中包含单引号或双引号,最好用另外一种引用字符,即如果字符串中有双引号,则引用字符用单引号;如果字符串中有单引号,则引用字符用双引号。当然,也可以用反斜杠对字符串中的引号进行转义,这样就不需要考虑引用字符用单引号还是双引号的问题了。
        3. print函数打印出的字符串都是用双引号括起来的,同时显示转义字符;writeLines()函数可以输出raw string。
        4. ?'"'命令可以打印引号的帮助文档,其中包括一些特殊字符,包括转义字符等的描述。
        5. Base R中也有很多字符串处理函数,包括length()、paste()、paste0()等,但inconsistent。stringr包中的字符串处理函数比较consistent,容易记忆,且函数名很直观,都是以str_开头。stringr包也是tidyverse的核包之一。

    > (a<-"'")
    [1] "'"
    > (b<-'"')
    [1] "\""
    > (b<-"\"")
    [1] "\""
    > (c<-"\n")
    [1] "\n"
    # 这里打印一个空行
    > writeLines(c)
    
    > 
    

    一些基本的字符串处理函数

        str_length:输入为字符向量;输出为数字向量,向量元素为字符向量中每个元素的长度。NA元素的长度为NA

    str_length(string)
    
    > a<-c("ABC","DEFC","FFFFF")
    > str_length(a)
    [1] 3 4 5
    > b<-"ABC"
    > str_length(b)
    [1] 3
    

        str_c(string combination):输入为一个或多个字符向量,输出为一个字符向量或一个长度为1的字符串。str_c()函数只有两个参数,其中sep指定多个向量之间元素的拼接符,应用sep之后返回一个字符向量,collapse(当collapse不为NULL时)基于应用sep之后的结果,指定连接字符向量的元素的字符,最终返回一个长度为1的字符串。

    str_c(..., sep = "", collapse = NULL)
    1)当输入只有一个字符向量时,sep参数不会起作用(因为其用于多个向量之间元素的拼接),
    collapse会发生作用,可设置。
    > a<-c("a","b","c")
    > str_c(a,collapse = "")
    [1] "abc"
    2)当输入两个或多个长度相同的字符向量时,sep参数起作用,如果collapse=NULL,则结果为向量
    > b<-c(1,2,3)
    > c<-c("A","B","C")
    > str_c(a,b,c)
    [1] "a1A" "b2B" "c3C"
    3)基于2),如果collapse=设置一个字符,则结果为长度为1的字符串
    > str_c(a,b,c,collapse = "-")
    [1] "a1A-b2B-c3C"
    4)如果输入的两个或多个向量长度不同,则函数将短向量循环延伸跟最长向量长度一致,再拼接
    > str_c("ex",b,c)
    [1] "ex1A" "ex2B" "ex3C"
    

        str_replace_na:将缺失值NA转换成字符串"NA"。

    > str_replace_na(c(NA, "abc", "def"))
    [1] "NA"  "abc" "def"
    

        str_sub(string subsetting):输入是字符向量,可实现字符串截取和字符替换;输出是字符串向量。对取子集,参数只有start和end,用来指定取子集范围;对字符串替换,增加omit_na参数考虑NA的情况。

    str_sub(string, start = 1L, end = -1L)
    str_sub(string, start = 1L, end = -1L, omit_na = FALSE) <- value
    默认start=1,end=-1,负值表示从字符串末尾开始的位置。1-based,左闭右闭区间。
    对所有参数,包括string,start,end,value,函数循环参数元素使其与最长的参数长度一致。
    如果字符向量元素不够长,则有多长就打印多长即可,也就是在元素长度和设置长度之间取最小值
    # string,start,end长度均为1
    > str_sub("ABCDEFG",start=2,end=4)
    [1] "BCD"
    # string,start,end等长,且长度都为3
    > str_sub(c("ABCDEFG","abcde","123456789"),c(2,3,4),c(5,4,-1))
    [1] "BCDE"   "cd"     "456789"
    #string,start,end不等长,自动循环至最长
    > str_sub(c("ABCDEFG","abcde","123456789"),c(2,3),5)
    [1] "BCDE" "cde"  "2345"
    Warning message:
    In stri_sub(string, from = start, to = end) :
      longer object length is not a multiple of shorter object length
    # 没错,不等长在某些情况下会有警告,所以随机应变
    > str_sub(x,c(2,3),5) <- c("OO","PP","QQ")
    Warning message:
    In `stri_sub<-`(`*tmp*`, from = start, to = end, omit_na = omit_na,  :
      longer object length is not a multiple of shorter object length
    > x
    [1] "AOOFG"   "abPP"    "1QQ6789"
    

        str_to_lowerstr_to_upperstr_to_title:字符串大小写转换,输入为字符向量,输出向量。

    # 字母全部转成大写
    str_to_upper(string, locale = "en")
    # 字母全部转成小写
    str_to_lower(string, locale = "en")
    # title为单词首字母大写,英文标题的形式
    str_to_title(string, locale = "en")
    # 句子的第一个单词的第一个字母大写,英文字母的形式
    str_to_sentence(string, locale = "en")
    
    locale参数指定语言,默认是英语。各种语言大小写的表示当然不同。
    locale被指定为ISO 639语言代码,是两个或三个字母的缩写
    https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
    

        str_sortstr_order:排序,输入是字符串向量,对向量的元素进行排序后,str_sort输出排序后的结果,str_order输出排序后值对应的索引。很好理解。

    可以设置升序或降序排列,默认是升序
    na_last指定NA值是否放在最后,默认TRUE
    locale默认是英语
    numeric:是否按数字排序,默认是字符串
    str_order(x, decreasing = FALSE, na_last = TRUE, locale = "en",
      numeric = FALSE, ...)
    str_sort(x, decreasing = FALSE, na_last = TRUE, locale = "en",
      numeric = FALSE, ...)
    

        str_wrap:将字符串包装成格式良好的段落。输入是字符向量,功能包括设置段落每一行的宽度,第一行缩进,除第一行外的其他号缩进。对段落进行格式化也是有算法的。

    str_wrap(string, width = 80, indent = 0, exdent = 0)
    width:每行的宽度,正整数,如果<=1,则每个单词一行
    indent:设置第一行的缩进(indentation),非负整数
    exdent:设置除第一行外的其他行的缩进,非负整数
    

        str_trim:去除字符串开始位置和结束位置处的空白符。

    str_trim(string, side = c("both", "left", "right"))
    可以指定只去除左边或右边的空白符
    str_squish(string)
    str_squish用来将字符串内部超过一个空白符的地方都变成一个空白符
    

    【上一篇:48.关于Set Operations-集合操作函数】
    【下一篇:50.关于正则表达式的基础知识】

    相关文章

      网友评论

          本文标题:49.关于字符串的基础知识和一些字符串操作函数

          本文链接:https://www.haomeiwen.com/subject/thjbiltx.html