R语言中有很多非常有用的函数,如果评有没有用实在是件比较艰难的事情,其实我们在之前也已经讲了很多有用的函数,但是都是比较简单的函数(简单但是常用),这里主要介绍一下和正则表达式相关的函数,没错,主要为了用于处理一些字符类的函数。 正则表达式(Regular Expression)是一种匹配检索模式,用于查询符合一定规则的字符,想了解更多可以百度搜索《正则表达式30分钟入门教程》,这分教程非常简单,但是正则表达式实在是天书,如果不是专门干这一项,了解一些基础的概念和常见的写法就可以了,比如什么叫元字符,什么叫转义等等。 字符串分裂:按字符分裂mystring <- '前者表示指定一个分裂字符串,当字符串中出现该固定模式时就进行分裂;后者表示每隔多少个字符进行分裂'strsplit(mystring, split = '字符',perl = T) # 固定字符strsplit(mystring, split = '字符|进行',perl = T) mystring <- c('前者表示指定一个分裂字符串','当字符串中出现该固定模式时就进行分裂', '后者表示每隔多少个字符进行分裂')strsplit(mystring, split = '字符|进行', perl= T) 1行创建一个字符串对象,2行使用基础的 字符串分裂:按固定长度分裂mystring <- '前者表示指定一个分裂字符串,当字符串中出现该固定模式时就进行分裂;后者表示每隔多少个字符进行分裂'strsplit(mystring, split ='(?<=.{3})', perl = T) substr(mystring, start = 1, stop = 3)startpoint <- seq(1, nchar(mystring)-1,3)stoppoint <- seq(2, nchar(mystring), 3)substring(mystring, startpoint, stoppoint) 2行使用了一个比较难懂的正则表达式,“?<=.{3}”表示匹配任意三个字符后面的字符,外面的英文小括号表示分组提取,这样split函数就有了分裂的依据,然后就可以得到按3个字符长度分裂的结果,当然你也可以改成任意一个字符长度,如果你看不懂,不要急下面提供另外一种方法;3行使用 字符串查找替换mystring <- '前者表示指定一个分裂字符串,当字符串中出现该固定模式时就进行分裂;后者表示每隔多少个字符进行分裂'grepl('字符', mystring,perl = T)gsub('字符','b', mystring, perl = T) 经常需要查看一个字符串中是否包含某种模式的字符,比如2行使用 在数据抓取的任务中我们经常碰到数据提取,但通常又不知道模式的起始范围,那就只能用函数指定一个模式去查找模式的起始位置, 模式查询函数mystring <- '前者表示指定一个分裂字符串,当字符串中出现该固定模式时就进行分裂;后者表示每隔多少个字符进行分裂'y <- regexpr('前者.*后者',mystring, perl = TRUE)yz <- y + attr(y, which ='match.length') - 1substr(mystring, start = y, stop = z)
模式查询函数:多次匹配mystring <- '前者表示指定一个分裂字符串,当字符串中出现该固定模式时就进行分裂;后者表示每隔多少个字符进行分裂'm <- gregexpr('字符',mystring, perl=TRUE)regmatches(mystring, m)
想了解更多关于字符和正则表达式的函数,可以输入“?gsub”查看帮助文档,你可以看到和正则表达式相关的很多个函数,不必每个都记住,但是需要记住他们都有相同的参数,第一个参数是指定模式,第二个x参数指定数据,x可以是单个字符串,也可以是一个字符串向量,换句话说这些函数都能进行向量计算,一次批量处理多个字符串,同时也推荐stringr包,一个专门用来做字符处理的R包。 |
|