R 语言字符串函数汇总

R 中字符串常用操作

字符串操作 函数
字符串长度 nchar()
字符串分割 strsplit()
字符串拼接 paste()
字符串截取 substr()
字符串替换 gsub() chartr() sub()
字符串匹配 grep() grepl()
大小写转换 toupper() tolower()

字符串长度

nchar 能够获取字符串的长度,它也支持字符串向量操作。注意它和 length 的结果是有区别的,length 返回 R 对象中的元素个数。

1
2
3
fruit <- 'apple orange grape banana'
nchar(fruit) # 字符串长度为 25
length(fruit) # 元素个数为 1

字符串分割

strsplit 负责将字符串按照某种分割形式将其进行划分,需要设定分隔符。

下面是用空格来作为分隔符将 fruit 分为四个元素:

1
2
3
4
5
6
7
strsplit(fruit, split=' ')
# [[1]]
# [1] "apple" "orange" "grape" "banana" # list 结构

fruitvec <- unlist(strsplit(fruit, split=' '))
fruitvec
# [1] "apple" "orange" "grape" "banana" # 转化为向量

字符串拼接

paste 负责将若干个字符串相连结,返回成单独的字符串。其优点在于,就算有的处理对象不是字符型也能自动转为字符型。另一个相似的函数 paste0 是设置无需分隔符的拼接。

1
2
3
4
5
paste(fruitvec, collapse=',')    # 逗号作为分隔符
# [1] "apple,orange,grape,banana"

paste0(fruitvec) # 无分隔符
# [1] "appleorangegrapebanana"

字符串截取

substr 能对给定的字符串对象取出子集,其参数是子集所处的起始和终止位置。

1
2
substr(fruit, 1, 5)
# [1] "apple"

字符串替换

chartr 是字母替换,不是字符串替换;
gsub 负责搜索字符串的特定表达式,并用新的内容加以替换;
sub 函数类似 gsub,但只替换第一个。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
chartr('world', 'bear', a)    # 字母替换
# Error in chartr("world", "bear", a) : 'old' is longer than 'new' # 长度要求一致

chartr('world', 'beara', a)
# [1] "herre beara"

x <- 'i love you'
chartr('you', 'she', x) # 实际是对应字母替换,不是字符串替换
# [1] "i lhve she"

a <- 'i love you, do you love me ?'
sub('you', 'she', a) # 只替换第一个参数 you
# [1] "i love she, do you love me ?"

gsub('you','she', a) # 可替换全部参数
# [1] "i love she, do she love me ?"

gsub('apple', 'strawberry', fruit)
# [1] "strawberry orange grape banana"

字符串匹配

grep 负责搜索给定字符串对象中的特定表达式,并返回其位置索引。grepl 函数与之类似,但其后面的 l 则意味着返回的将是逻辑值。

1
2
3
4
5
grep('grape', fruitvec)   # 返回 grape 在 fruitvec 中的位置
# [1] 3

grepl('grape', fruitvec) # 返回每个元素匹配的逻辑值
# FALSE FALSE TRUE FALSE

大小写转换

toupper 所有字符转换为大写;
tolower 所有字符转换为小写。

1
2
3
4
5
6
7
8
9
10
11
12
13
a <- "Hello World"

toupper(a) # 全部转换为大写
# [1] "HELLO WORLD"

tolower(a) # 全部转换为小写
# [1] "hello world

# 首字母大写其余小写
paste0(
toupper(substr(a, 1, 1)),
tolower(substr(a, 2, nchar(a))))
# [1] "Hello world

Writing Enriches Life.