注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mobius-Band

 
 
 

日志

 
 

R语言数据出--文本处理(字符串的分离与合并)  

2015-07-07 23:55:28|  分类: R |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
利用R语言处理字符串的分离与合并主要运用的是:strsplite()(字符串的分离) 和paste()(字符串的合并)这两个函数。
这两函数的具体参数如下:
  1. strsplit(x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE)
  2. #x是要分割的字符串
  3. #split是分割符,如果split="",则会对字符串逐个进行分割
  4. #返回的结果是列表
如:
  1. a="abcd efg"
  2. strsplit(a,split = " ") #以空格为分隔符
  3. strsplit(a,split = "")  #逐个字符进行分割
  1. paste (..., sep = " ", collapse = NULL)
  2. #sep是每个元素合并的连接符
  3. #collapse是将一个字符向量合并成一个元素时的连接符
例如:
  1. a=c("A","B","C")
  2. paste(a,"d",sep = "")
  3. #这里"d"会做循环3次来满足a中的向量元素,然后合并成一个拥有3个元素的向量
  4. a=c("A","B","C")
  5. paste(a,collapse = "")
  6. #这个代码会将a中的三个元素合并成一个
如果需要对某个字符串中的每个元素进行操作,可以将这两个函数一起使用实现向量操作,从而避免利用for循环来提取每一个字符,以提高工作效率。
例如:
  1. a=sample(c(letters,LETTERS),size = 10000,replace = T)
  2. a=paste(a,collapse = "")
  3. #a是一个很长的字符串
现在要实现将a中每一小写字母变成大写,将每一大写字母变成小写。
如果利用for循环,那么代码是这样的:
  1. for(i in 1:nchar(a)){
  2.     if(substr(x = a,start = i,stop = i)!=toupper(substr(x = a,start = i,stop = i))){
  3.          substr(x = a,start = i,stop = i)=toupper(substr(x = a,start = i,stop = i))
  4.    }else{
  5.          substr(x = a,start = i,stop = i)=tolower(substr(x = a,start = i,stop = i))
  6.    }
  7. }
我们利用system.time()函数观测一下这串代码的运行时间:
R语言数据出--文本处理(字符串的分离与合并) - Mobius-Band - Mobius-Band 
现在我们利用strsplite()和paste()结合处理
  1. #首先定义一个函数实现大小写转换
  2. turn=function(x){
  3.     if(x==toupper(x)){
  4.           x=tolower(x)
  5.    }else{
  6.           x=toupper(x)
  7.    }
  8.     x
  9. }  
  10. #然后将a进行分离
  11. b=unlist(strsplit(a,split = ""))    #由于strsplit函数结果会以列表返回,这里我们将其变成向量,方便后续处理
  12. b=sapply(b, turn,USE.NAMES = F)     #利用sapply函数避免for循环
  13. b=paste(b,collapse = "")      #最后在合并还原
所得到同样的结果,现在我们来看看运行这串代码所用的时间:
R语言数据出--文本处理(字符串的分离与合并) - Mobius-Band - Mobius-Band 
这种方式效率明显高出for循环太多。
  评论这张
 
阅读(70)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018