1 nchar

作用:可以读取一个字符串的实际长度(字符串内部字符数目)

x<-c('Hello','how are you?')
 nchar(x)
 y<-c('what are you doing',NA,'I do nothing!',23)
 nchar(y)

字符串相加 r语言 r 字符串长度_perl


2length

作用:返回向量和矩阵中元素的个数,数据框列的个数,列表中的元素个数

a<-1:100#向量
b<-matrix(rnorm(50),5,10)#矩阵
c<-ToothGrowth#数据框
d<-list(a,b,c)#列表
length(a);length(b);length(c);length(d)

字符串相加 r语言 r 字符串长度_字符串相加 r语言_02

读者注意区别ncharlength的差异。前者是字符个数,后者是向量长度。

3tolowertoupper

tolower:将字符串转为小写

toupper:将字符串转为大写

x1<-'ATTGCTACGGACGTT'
 x2<-'ATTGCtacgGACGTT'
 tolower(x1)
 tolower(x2)
 y1<-'atgcgtatgcct'
 y2<-'atgCGTatgcct'
 toupper(y1)
 toupper(y2)

字符串相加 r语言 r 字符串长度_字符串相加 r语言_03


4chartr

作用:字符替换(’ --> ''

语法规则:chartr(old = ,new = ,x = )

old:被替换的x中的旧字符集合

new:替换处理后,新的字符集合,长度必须大于或等于旧的字符集合

x:字符串或者字符串的对象

x <- "MiXeD cAsE 123"
 chartr("iXe", "why", x)
 chartr("a-cX", "D-Fw", x)

字符串相加 r语言 r 字符串长度_字符串_04


5casefold

作用:大小写转换的整合版

x<-c('sfjlkDHFGSdklfj')
 casefold(x,upper = T)
 casefold(x,upper = F)

字符串相加 r语言 r 字符串长度_perl_05


6paste

作用:字符串连接,用sep分割

paste(1:12,sep="")
 paste(1:12,collapse='')
 paste("1st", "2nd", "3rd", collapse = ", ")
 paste("1st", "2nd", "3rd", sep = ", ")

字符串相加 r语言 r 字符串长度_perl_06


sep对多个字符向量连接不起作用,想要连接起来,必须用collapse='自己设定分隔符'

注意下面的区别:

x<-1:3
 y<-c('a','b','c')
 paste(x,y,sep='-')
 paste(x,y,collapse = ':')
 paste(x,y,sep='-',collapse = ':')

字符串相加 r语言 r 字符串长度_字符串_07

7substrsubstring

substr( )函数和substring( )函数是截取字符串最常用的函数,两个函数功能方面是一样的,只是其中参数设置不同。

substr:必须设置参数start和stop,如果缺少将出错

substring:可以只设置first参数,last参数若不设置,指字符串的最大长度。

语法规则

substr(x, start, stop) 
substring(text, first, last = 1000000L)
substr("abcdef", 2, 4)
 substring("abcdef", 1:6, 1:6)
 x <- c("asfef", "qwerty", "yuiop[", "b", "stuff.blah.yech")
 substr(x, 2, 5)
 substring(x, 2, 4:6) # 注意查看输出结果

字符串相加 r语言 r 字符串长度_字符串_08


8strsplit 

作用:用于字符串分割,其中split 是分割参数。所得结果以默认以list形式展示。其中用于分割的字符串将不再出现,分割后的结果可以结合unlist使用。

语法规则:strsplit(x = ,split = ,fixed = ,perl = ,useBytes = )

x:字符串向量

split:分割参数(参数在结果不会出现)

fixed:默认为正则表达式匹配,否则表示使用普通文本匹配

perl:如果正则表达式很长,正确设置表达式并且使用perl=TRUE可以提高运算速度。

useBytes:是否逐个字节进行匹配,默认为FALSE,即按字符而不是字节进行匹配。

text <- "Hello Robert!\nHello Ava!"
 strsplit(text,' ')
 strsplit(text, "\\s")# 正则表达式
strsplit(text, "")#空字符,长度为0
 unlist(strsplit("a.b.c", "[.]"))#正则表达式
unlist(strsplit("a.b.c", "."))

注意:\n是当成一个字符来处理的

字符串相加 r语言 r 字符串长度_正则表达式_09


9subgsub

作用:字符串替换,gsub是全局替换,sub仅替换遇到的第一个匹配字符。

语法规则

sub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,    fixed = FALSE, useBytes = FALSE) 

gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,     fixed = FALSE, useBytes = FALSE)

pattern:欲被替换的字符串,可以使用正则表达式

replacement:替代后的字符串

x:原始字符串

text <- "Hello Robert!\nHello Ava!"
 sub(pattern = 'Hello',replacement = 'Hi',x = text)
 gsub(pattern = 'Hello',replacement = 'Hi',x = text)
 text#观察一下发现原字符串没有变化

字符串相加 r语言 r 字符串长度_perl_10


结论:虽然sub和gsub是用于字符串替换的函数,但严格地说R语言没有字符串替换的函数,因为R语言不管什么操作对参数都是传值不传址,要改变原变量我们只能通过再赋值的方式。

备注:chartr()的替换单位是字符,sun()gsub()的替换单位是字符串。

10grepgrepl

作用:这两个函数返回向量水平的匹配结果,不涉及匹配字符串的详细位置信息。

语法规则

grep(pattern, x, ignore.case = FALSE, perl = FALSE, value = FALSE,     fixed = FALSE, useBytes = FALSE, invert = FALSE) 
grepl(pattern, x, ignore.case = FALSE, perl = FALSE,      fixed = FALSE, useBytes = FALSE)
grep:仅返回匹配项的下标
grepl:返回所有的查询结果,并用逻辑向量表示有没有找到匹配
grep(pattern = "[a-z]",x = letters)
 grepl(pattern = '[a-z]',x=letters)

字符串相加 r语言 r 字符串长度_字符串_11


11regexprgregexprregexec

作用:在字符串中提取出特定的字符串(pattern)的相关信息,其中,pattern可以是字符串,也可以是正则表达式。

regexpr:只查询匹配第一个特定字符

gregexpr:全部查询

text <- c("Hello, Robert! Hi, Robert!", "How are you, Robert.")
a<-regexpr(pattern = 'ob',text )
b<-gregexpr(pattern = 'ob',text)
c<-regexec(pattern = 'ob',text)
a;b;c;

字符串相加 r语言 r 字符串长度_perl_12



备注:gregexpr返回一个列表,在直接读取起始位置时,可以借助b[[1]][1]来表示第一次匹配的结果,b[[1]][2]表示第二次匹配的结果。

 b[[1]][1];b[[1]][2];b[[2]][1]

字符串相加 r语言 r 字符串长度_字符串相加 r语言_13

另外,在直接读取匹配字符串长度时,可以使用attr(b[[1]],'match.length)以向量形式返回两次匹配的字符串长度

字符串相加 r语言 r 字符串长度_perl_14

最后,如果没有匹配发生,返回值为-1

text <- c("Hello, Robert! Hi, Robert!", "How are you, Robert.")
 regexpr(pattern = 'ob',text )
 gregexpr(pattern = 'od',text)
 regexec(pattern = 'oc',text)

字符串相加 r语言 r 字符串长度_perl_15

12strtrim

作用:将字符串修剪到特定的显示宽度

注意:该函数只能去掉多余的字符不能增加其他额外的字符,如果字符串本身的长度小于width,得到的是原字符串。

字符串相加 r语言 r 字符串长度_字符串_16

13matchcharmatch

match:按向量进行运算,返回第一次匹配的元素的位置,非字符向量也可用。

charmatch:读者自己领会吧(汗)

match(x = 'abc',table = c('dkf','abc','123',456))
 charmatch("m",   c("mean", "median", "mode"))
 charmatch("med", c("mean", "median", "mode"))

字符串相加 r语言 r 字符串长度_perl_17


其实字符函数还有很多,这里就不一一描述了。下面针对上述出现的常用字符做个总结:

paste函数:字符串连接

strsplit函数:字符串拆分

grepgrepl函数:字符串查询

regexprgregexprregexec:字符串查询

subgsub函数:字符串替换

substrsubstring函数:字符串提取

tolowertoupper函数:大小写转换

在结尾,我们谈一谈正则表达式,我们进行字符处理时,一般情况下不是精确的处理,而是处理拥有相似规则的一类字符串,这个时候,就需要用到正则表达式。

1、字符类

字符类用于表达多个字符集合内的任意一个字符,我们常用 [ ] 来表示字符集合(和perl中的字符集很像)。

例如:[aeiou]可用于匹配a、e、 i、 o、 u单个字符,但是不能匹配“aeiou”。

我们还可以给定[ ]一个范围,[0-9]匹配任意一个0~9的数字,[a-z]匹配任意一个小写英文字母。

有些特殊字符可以匹配某类字符集合,.  可以匹配除了\n意外的任意字符,在这里我叫它元字符如果想要匹配点号本身,我们要用\\. 

2、限定符

符号

说明

*

匹配0次以上(包括0次)

+

一次以上,至少一次

0或1

^

脱字符,匹配开头的元素

$

匹配结尾的元素

{n}

重复n次

{n,}

n次或n次以上

{n,m}

重复n到m次