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

2021-09-01  本文已影响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.关于正则表达式的基础知识】

上一篇下一篇

猜你喜欢

热点阅读