4.1 base R
本小节简述 base R 中关于字符处理的常用函数。
4.1.1 单双引号
R
语言中字符串输入时,可以使用单引号,也可以使用双引号,详情请看?Quotes
。
单双引号,用法和意义没有差别
R 中推荐使用双引号分隔符,打印、显示时都是用双引号
单引号字符串通常用在字符串内包含双引号时,如用 R 执行 sql 字符串代码时
R-4.0之后引入的R字符[newfeatures],让单双引号基本没区别
R中的字符用单双引号都可创建,如下所示:
<- "R语言"
x
x#> [1] "R语言"
<- 'R语言'
x
x#> [1] "R语言"
4.1.2 转义
要在字符串中包含单引号或双引号,需用 转义它,即遇到特殊符号时需要转义,如果不正确使用转义,可能会报错,如下所示:
paste(""","abc",sep="")
#> 错误: unexpected string constant in "paste(""",""
R语言中使用“"把特定的字符转义为特殊字符,例如“是制表符,“”是换行符,或者是“”(系统差异)。想要正确显示“’”,需使用转义,如下所示:
<- "我是一名\'小学生\'"
char
char#> [1] "我是一名'小学生'"
打印会显示转义符,因为 R 语言内数据存储和打印是不一样的,运行结果为存储的数据形式,不是打印形式。
要查看字符串的原始内容,可使用writeLines()
或cat()
。
<- c("\"", "\\")
x
x#> [1] "\"" "\\"
writeLines(x)
#> "
#> \
writeLines(char)
#> 我是一名'小学生'
cat(char)
#> 我是一名'小学生'
4.1.3 常用函数
- 字符数量
<- 'abcdefg'
s 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"
大家可以自行了解
paste
和paste0
两个函数的差异。
- 截取
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='-'))
官方手册中提供一个字符倒叙的自定义编写的函数:
<- function(x) sapply(lapply(strsplit(x, NULL), rev), paste, collapse = "")
strReverse strReverse(c("abc", "Statistics"))
#> [1] "cba" "scitsitatS"
这个自定义编写的函数实现的逻辑是:将字符串全部切割成单个字符,然后使用rev()
函数将字符向量倒序,最后通过paste()
函数将字符向量合并在一起。最后将该过程使用 apply 系列函数包装,实现更好的向量化。
4.1.4 新特性
该特性让反斜杠或单引号和双引号书写变得容易。用法r“(…)”,括号中可以是任意字符,详情请看?Quotes
。
# windows下路径 ,不用转义路径复制直接可用
<- r"(C:\Users\zhongyf\Desktop\Rbook)"
char
char#> [1] "C:\\Users\\zhongyf\\Desktop\\Rbook"
<- "我是一名\'小学生\'"
char cat(char)
#> 我是一名'小学生'
<- r"(我是一名'R语言'学习者)"
char cat(char)
#> 我是一名'R语言'学习者
注意该特性需要在R-4.0.0之后的版本中使用