您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > R语言学习系列11-字符串处理
11.字符串处理一、字符数统计与简单转化nchar(x)——统计x中字符个数;注意与length(x)的区别:向量x的长度。tolower(x)——将x转化为小写;toupper(x)——将x转化为大写;chartr(old,new,x)——将x中的old字符替换为new字符;x-c(HelloWorld!,We...)length(x)[1]2nchar(x)[1]136tolower(x)[1]helloworld!we...toupper(x)[1]HELLOWORLD!WE...chartr(l,L,x)[1]HeLLoWorLd!We...二、字符串连接函数paste(),基本格式为:paste(…,seq=,collapse=NULL)其中,seq表示分隔符(默认为空格);collapse若不指定值,则返回值是连接后的字符型向量,若指定值,则连接后的字符型向量会再用collapse值连接成一个字符串。paste(AB,1:5,sep=)[1]AB1AB2AB3AB4AB5x-list(a=1st,b=2nd,c=3rd)y-list(d=1,e=2)paste(x,y,sep=-)[1]1st-12nd-23rd-1paste(x,y,sep=-,collapse=;)[1]1st-1;2nd-2;3rd-1paste(x,collapse=,)#将x的各分量用,连接为一个字符串[1]1st,2nd,3rd注意:连接时,短向量将被循环使用。三、字符串拆分函数strsplit(),基本格式为:strsplit(x,split,fixed=FALSE,useBytes=FALSE,...)其中,x为字符串向量,每个元素将被分别拆分,拆分结果为一个列表;split为指定拆分位置的子串或正则表达式;fixed=FALSE(默认),则split作为正则表达式fixed=TRUE,则split作为精确匹配的文本字符串useBytes设置是否逐个字节进行匹配,默认为FALSE,即按字符而不是字节进行匹配。data-c(2016年1月1日,2016年2月1日)list1-strsplit(data,年)#以“年”为分隔符拆分list1[[1]][1]20161月1日[[2]][1]20162月1日list1[[1]][1]#提取列表中的元素[1]2016text-HelloAdam!\nHelloAva!strsplit(text,)#按空格拆分[[1]][1]HelloAdam!\nHelloAva!strsplit(text,\\s)#按空白符拆分,\n也是空白符[[1]][1]HelloAdam!HelloAva!strsplit(text,)#特殊情况,拆分成一个个字符[[1]][1]HelloAdam!\nHel[16]loAva!四、字符串查询1.函数grep()与grepl()基本格式为:grep(pattern,x,ignore.case=FALSE,value=FALSE,fixed=FALSE,invert=FALSE,...)grepl(pattern,x,ignore.case=FALSE,fixed=FALSE,...)注意:函数grepl()中没有参数value和invert.其中,pattern为要查询的子串或正则表达式;x为字符串向量;ignore.case设置是否对大小写敏感,默认FALSE为大小写敏感,TRUE为大小写不敏感;value=FALSE(默认)函数返回匹配项下标,若为TRUE则函数返回匹配项;invert默认为FALSE,若为TRUE则函数返回不匹配项的下标。两个函数都是用于字符串的查询,且查询效果是一致的,区别是grep()返回匹配项的下标,而grepl()则是返回一个逻辑向量,TRUE表示匹配,FALSE表示不匹配。2.其它函数regexpr()——返回匹配项的起始位置及匹配项的长度;gregexpr()——同regecec(),返回一个列表,结果包括匹配项的起始位置与匹配项的长度注:三个函数的参数同grepl()txt-c(Whatever,is,worth,doing,is,worth,doing,well)grep(e.*r|wo,txt,fixed=FALSE)[1]136grep(e.*r|wo,txt,fixed=FALSE,value=TRUE)[1]Whateverworthworthgrepl(e.*r|wo,txt,fixed=FALSE)[1]TRUEFALSETRUEFALSEFALSETRUEFALSEFALSEregexpr(e.*r|wo,txt,fixed=FALSE)#结果竖着看,-1未匹配[1]5-11-1-11-1-1attr(,match.length)[1]4-12-1-12-1-1attr(,useBytes)[1]TRUEgregexpr(e.*r|wo,txt,fixed=FALSE)[[1]][1]5attr(,match.length)[1]4attr(,useBytes)[1]TRUE[[2]][1]-1attr(,match.length)[1]-1attr(,useBytes)[1]TRUE[[3]][1]1attr(,match.length)[1]2attr(,useBytes)[1]TRUE[[4]][1]-1attr(,match.length)[1]-1attr(,useBytes)[1]TRUE[[5]][1]-1attr(,match.length)[1]-1attr(,useBytes)[1]TRUE[[6]][1]1attr(,match.length)[1]2attr(,useBytes)[1]TRUE[[7]][1]-1attr(,match.length)[1]-1attr(,useBytes)[1]TRUE[[8]][1]-1attr(,match.length)[1]-1attr(,useBytes)[1]TRUE五、字符串替换函数sub()和gsub(),基本格式为:sub(pattern,replacement,x,ignore.case=FALSE,fixed=FALSE,...)gsub(pattern,replacement,x,ignore.case=FALSE,fixed=FALSE,...)用来在x中搜索pattern,并用replacement将其替换。两个函数的区别是,sub()只对第一个满足条件的匹配作替换,若x是向量,则对每个元素第一个满足条件的匹配作替换;gsub()将把所有满足条件的匹配都做替换。sub([tr],k,txt)#将各元素第一个t或r替换为k[1]Whakeveriswokthdoingiswokthdoingwellgsub([tr],k,txt)#将所有t或r替换为k[1]Whakevekiswokkhdoingiswokkhdoingwell六、字符串提取函数substr()和substring(),基本格式为:substr(x,start,stop)-valuesubstring(x,start,stop)-value其中,x为字符串或字符串向量(对每个元素都分别操作);start为起始位置;stop为结束位置;value为字符向量,若没有“-value”,函数只提取相应位置内的子串,若有“-value”,则用它的值做相应替换。substr(abcdef,2,4)[1]bcdsubstring(abcdef,1:6,1:6)[1]abcdefsubstr(abcdef,1:6,1:6)[1]atxt-c(HelloWorld!,Weloveyou)substr(txt,2,4)[1]ellelsubstr(txt,2,4)-c(..,++)txt[1]H..loWorld!W++loveyou注意:两个函数的区别,多对参数时,substr()只操作第1对参数,而substring()则都会操作。用可以很方便地拆分DNA序列,例如DNA-GCAGCGCATATGbases-c(A,T,G,C)substring(DNA,seq(1,10,by=3),seq(3,12,by=3))[1]GCAGCGCATATG七、其它函数函数strtrim(x,width)将字符串x“修剪”为长度为width.函数match(x,table)返回x在table中第一次匹配的位置。主要参考文献:[1]张良均,谢佳标,杨坦,肖刚.R语言与数据挖掘.机械工业出版社,2016.[2]“在路上”博客,《R语言:文本(字符串)处理与正则表达式》:
本文标题:R语言学习系列11-字符串处理
链接地址:https://www.777doc.com/doc-3887907 .html