读书频道 > 网站 > 网页设计 > R语言与网站分析
2.9.3 字符串内部字符的读取和替换
14-08-13    奋斗的小年轻
收藏    我要投稿   

本文所属图书 > R语言与网站分析

本书从互联网应用角度对R语言如何实现数据挖掘和指标分析等问题做了阐述。通过诸多真实应用案例的分析,作者试图为读者建立起一座沟通数学原理和互联网实际业务应用的桥梁。同时本书给出了案例中的完整代码以及分立即去当当网订购

1.使用substr()函数进行读取和替换字符串

substr函数可以直接读取/替换字符串中的一段子字符串,其基本形式为:
substr(x, start, stop)

具体参数的含义如表2-14所示。

表2-14substr函数参数说明
参数 说明
x 字符串或者字符串的对象
start 预读取/替换字符串的第一个下标
stop 预读取/替换字符串的最后一个下标

示例代码如下:
a<-"haghfff"
substr(a,2,4)          #读取字符串a的第2~4个字符
    [1] "agh"
substr(a,2,4)<-"kkk"   #把字符串a的第2~4个字符替换为字符串kkk
a
    [1] "hkkkfff"

2.使用grep ()函数读取列表内的特定字符串

grep(pattern,x)函数可以在字符型列表(参数x)中找出和特定字符串(参数pattern)匹配的序列编号。如果不匹配,则返回integer(0),其长度length(grep(pattern.x))=0。其中pattern可以是字符串,也可以是一个正则表达式。例如:
a<-list("GET /News.htm HTTP/1.0","GET /feed.html HTTP/2.0")
c<-grep(".html",a);c
  [1] 2

上例中,字符型列表a的第二个字符串包含字符串".html",grep(".html",a)的返回值是2。如果a不是字符型列表,而是一个字符串,则grep可用于判别该字符串中是否包含特殊字符,如果包含,则返回1,不包含,则返回integer(0)。例如:
a<-"GET /News.htm HTTP/1.0"
c<-grep(".html",a);c
  integer(0)
a<-"GET /feed.html HTTP/2.0"
c<-grep(".html",a);c
  [1] 1

3.使用regexpr()gregexpr()和函数读取字符串内的特定字符串

regexpr(pattern,text)函数可以在字符串x中提取出特定字符串pattern的相关信息。其中pattern可以是字符串,也可以是一个正则表达式。例如:
a<-"GET /News.html HTTP/1.0 feed.html  HTTP/2.0"
b<-regexpr(".html",a);b
  [1] 10
  attr(,"match.length")
  [1] 5
  attr(,"useBytes")
  [1] TRUE

通过regexpr(".html",a),系统返回如下信息:

在字符串a中,第一个和字符串".html"匹配的起始位置为10。可以使用b[1]来直接读取。

在字符串a中,第一个和字符串".html"匹配的字符长度为5。可以使用attr(b,"match.length")或者b[[2]]来直接读取。

在字符串a中是否有字符串与".html"匹配,答案为TRUE。可以使用attr(b,"useBytes")来直接读取。

由上例可知,regexpr()函数只查询匹配第一个特定字符,要想多次匹配需要使用gregexpr()函数。例如:
a<-"GET /News.html HTTP/1.0 feed.html  HTTP/2.0"
b<-gregexpr(".html",a);b
  [[1]]
  [1] 10 29
  attr(,"match.length")
  [1] 5 5
  attr(,"useBytes")
  [1] TRUE

 注意

返回的b是一个列表,在直接读取起始位置时,可以使用b[[1]][1]来表示第一次匹配的起始位置,返回值是10。使用b[[1]][2]表示第2次匹配的起始位置,返回值是29。在直接读取匹配字符串长度时,可以使用attr(b[[1]],"match.length")以向量形式返回两次匹配的字符串长度。

4.使用chartr ()函数作字符替换

使用chartr()函数可以直接进行字符的替换,其查询的规则将以被替换字符串的形式给出,其基本形式为:
chartr(old, new, x)
表2-15给出了具体的参数说明。
表2-15 chartr函数参数说明
参数 说明
x 字符串或者字符串的对象
old 预被替换的x中的旧字符集合。如果x字符串中不包括old字符集合,则函数结果仍返回x字符串,不做任何处理
new 替换处理后,新补充的字符集合。其长度必须大于等于旧字符集合

示例代码如下:
a<-"haghfff"
a<-chartr("k","f",a) #字符串a中并未包括k字符,chartr对a不做任何处理
  [1] "haghfff"
a<-chartr("fff","tt",a) #出现了错误:old字符比new字符长了
  错误于chartr("fff", "tt", a) : 'old'比'new'要长
a<-chartr("hf","01",a)
a
  [1] "0ag0111"

在上例中,只有最后一个是正确的,chartr("hf","01",a)把字符串a中的所有h字符替换为了0,所有f字符替换为了1。

 注意

不是直接在字符串a中截取hf,并替换为01。

5.使用sub()和gsub()函数进行字符串替换

chartr()的替换单位是字符,sub()和gsub()函数的替换单位则是字符串。sub函数基本形式如下:
sub(pattern, replacement, x)

具体参数的含义如表2-16所示。

相应的示例代码如下:
a<-"GET /News.html HTTP/1.0 feed.html  HTTP/2.0"
b<-sub(".html","替换",a);b
  [1] "GET /News替换 HTTP/1.0 feed.html  HTTP/2.0"

上例把字符串a内的字符串".html"部分替换为了字符串"替换"。但是sub函数只对第一个".html"进行了替换,要想进行全部替换可以使用gsub函数。例如:
a<-"GET /News.html HTTP/1.0 feed.html  HTTP/2.0"
b<-gsub(".html","替换",a);b
  [1] "GET /News替换 HTTP/1.0 feed替换  HTTP/2.0"

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站