4.1 base R

本小节简述 base R 中关于字符处理的常用函数。

4.1.1 单双引号

R语言中字符串输入时,可以使用单引号,也可以使用双引号,详情请看?Quotes

  • 单双引号,用法和意义没有差别

  • R 中推荐使用双引号分隔符,打印、显示时都是用双引号

  • 单引号字符串通常用在字符串内包含双引号时,如用 R 执行 sql 字符串代码时

  • R-4.0之后引入的R字符[newfeatures],让单双引号基本没区别

R中的字符用单双引号都可创建,如下所示:

x <- "R语言"
x
#> [1] "R语言"
x <- 'R语言'
x
#> [1] "R语言"

4.1.2 转义

要在字符串中包含单引号或双引号,需用 转义它,即遇到特殊符号时需要转义,如果不正确使用转义,可能会报错,如下所示:

paste(""","abc",sep="")
#> 错误: unexpected string constant in "paste(""",""

R语言中使用“"把特定的字符转义为特殊字符,例如“是制表符,“”是换行符,或者是“”(系统差异)。想要正确显示“’”,需使用转义,如下所示:

char <- "我是一名\'小学生\'" 
char
#> [1] "我是一名'小学生'"

打印会显示转义符,因为 R 语言内数据存储和打印是不一样的,运行结果为存储的数据形式,不是打印形式。

要查看字符串的原始内容,可使用writeLines()cat()

x <- c("\"", "\\")
x
#> [1] "\"" "\\"
writeLines(x)
#> "
#> \
writeLines(char)
#> 我是一名'小学生'
cat(char)
#> 我是一名'小学生'

4.1.3 常用函数

  • 字符数量
s <- 'abcdefg'
nchar(s)
#> [1] 7
  • 大小写
# 转换为大写
toupper('abc')
#> [1] "ABC"

# 转换为小写
tolower('ABC')
#> [1] "abc"
  • 拼接

函数paste()将不同的字符向量拼接组合起来,返回的数据类型是字符向量。其中分割参数 sep 默认值是" "(空格)。collapse 参数是使用指定的字符把各元素拼接在一次成一个单独的字符串。

paste('a','b','d')
#> [1] "a b d"
paste('a','b','d',sep = '')
#> [1] "abd"
paste('a','b','d',sep = '_')
#> [1] "a_b_d"
paste(c('a','b'),c('d','e'),collapse = '_')
#> [1] "a d_b e"
paste(c('a','b'),c('d','e'),sep = '-',collapse = '_')
#> [1] "a-d_b-e"

大家可以自行了解pastepaste0两个函数的差异。

  • 截取

substr函数用于字符串截取子字符串,start,stop参数是整数。

# 空格占据一个长度
substr("R is free software" ,start = 1,stop = 6)
#> [1] "R is f"
  • 分割

函数strsplit按照指定的字符把字符分割成子字符。参数x指被分割的字符,split是用于分割的字符标准,fixed是否完全匹配分隔符,默认是TRUE,完全匹配模式,当fixed参数为FALSE时,表明split参数是正则表达式,使用正则匹配。

strsplit(x,split,fixed,perl,useBytes)

strsplit函数返回的结果是列表,大部分时候需要向量化后使用。

strsplit('广东省-深圳市-宝安区',split='-')
#> [[1]]
#> [1] "广东省" "深圳市" "宝安区"
# 向量化
# unlist(strsplit('广东省-深圳市-宝安区',split='-'))

官方手册中提供一个字符倒叙的自定义编写的函数:

strReverse <- function(x) sapply(lapply(strsplit(x, NULL), rev), paste, collapse = "")
strReverse(c("abc", "Statistics"))
#> [1] "cba"        "scitsitatS"

这个自定义编写的函数实现的逻辑是:将字符串全部切割成单个字符,然后使用rev()函数将字符向量倒序,最后通过paste()函数将字符向量合并在一起。最后将该过程使用 apply 系列函数包装,实现更好的向量化。

4.1.4 新特性

该特性让反斜杠或单引号和双引号书写变得容易。用法r“(…)”,括号中可以是任意字符,详情请看?Quotes

# windows下路径 ,不用转义路径复制直接可用
char <- r"(C:\Users\zhongyf\Desktop\Rbook)" 
char
#> [1] "C:\\Users\\zhongyf\\Desktop\\Rbook"
char <- "我是一名\'小学生\'" 
cat(char)
#> 我是一名'小学生'

char <- r"(我是一名'R语言'学习者)"
cat(char)
#> 我是一名'R语言'学习者

注意该特性需要在R-4.0.0之后的版本中使用