4.1 base R

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

4.1.1 单双引号

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

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

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

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

  • R-4.0之后引入的R字符新特性,让单双引号基本没区别

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

x <- "R语言"
x
x <- 'R语言'
x

4.1.2 转义

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

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

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

char <- "我是一名\'小学生\'" 
char

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

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

x <- c("\"", "\\")
x

writeLines(x)
writeLines(char)
cat(char)

4.1.3 常用函数

  • 字符数量
s <- 'abcdefg'
nchar(s)
  • 大小写
toupper('abc')
tolower('ABC')
  • 拼接

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

paste('a','b','d')
paste('a','b','d',sep = '')
paste('a','b','d',sep = '_')
paste(c('a','b'),c('d','e'),collapse = '_')

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

  • 截取

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

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

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

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

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

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

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

strReverse <- function(x) sapply(lapply(strsplit(x, NULL), rev), paste, collapse = "")
strReverse(c("abc", "Statistics"))

4.1.4 新特性

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

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

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

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