R语言:字符串的处理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ed9ygoK8-1607421930601)(F:\JianShu_material\R\图片\字符串的基本操作\字符串的处理.png)]

1. 字符串基本操作

  • nchar(string):求字符串长度
>data<-"R语言是门艺术" >nchar(data)
[1] 7
  • paste(str1,str2,sep):字符串合并
> data<-"R语言是门艺术"
> data1<-"要用心体会"
> paste(data,data1,sep=",")
[1] "R语言是门艺术,要用心体会"
  • strsplit(string,sep):字符串分割
> data3<-"2017年2月28"
> strsplit(data3,"年")
[[1]]
[1] "2017" "2月28"
  • substr(string,start,stop):读取和替换字符串
> substr(data3,5,5)
[1] "年"
> substr(data3,4,4)<-"6"
> data3
[1] "2016年2月28"
  • chartr(old,new,string):字符串替换
chartr("29","29日",data3) #old不存在,无操作
chartr("28","28日",data3) #超过string长度的字符不替换
chartr("28","2日",data3)

2. 正则表达式

正则表达式:是用来描述、匹配符合某个模式的字符串的“规定”表达式,即描述文本的某种模式的计算机语言

正则表达式由两种字符类型组成

  • 普通字符:包括了所有的大小写英文字母和数字,即所有的英文大小写字母和数字本身就是正则表达式,可用于匹配它们自己
  • 元字符:是一类特殊的字符,这些字符在正则表达式中不能用来描述或匹配该字符本身,而是被指定用来表示其他含义

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pawDSA2R-1607421930607)(F:\JianShu_material\R\图片\字符串的基本操作\001.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BJmsnZUu-1607421930609)(F:\JianShu_material\R\图片\字符串的基本操作\002.png)]

R中的grep、grepl、sub、gsub、regexpr、gregexpr等函数都使用正则表达式的规则进行匹配

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-usmHFVc3-1607421930612)(F:\JianShu_material\R\图片\字符串的基本操作\003.png)]

#练习:查找一下看有没有do组合的单词
>text<-
c("Don't","aim","for","success","if","you","want","it","just","do","
what","you","love","and","believe","in","and","it","will","come","
naturally")
>#查找含有Do组合的单词
1. D不区分大小写
2. D大写
3. D小写
> grep("[Dd]o",text)#D不区分大小写
[1] 1 10
> grep("[D]o",text)#D大写
[1] 1
> grep("[d]o",text)#D小写
[1] 10

3. 文本文件的读写

R中读取文本文件的主要函数是readLines()和scan(),R会将全部读入的文本保存在一个字符型的向量里

readLines(con = stdin(), n = -1L, ok = TRUE, warn = TRUE,
encoding = "unknown", skipNul = FALSE)
  • 参数con是指连接(connection)对象,最常见的就是一个文件
  • n为整数,设置读取的最大行数,默认的负值表示读取文件至末尾
  • encoding是指读入文本的编码方式
scan(file = "", what = double(), nmax = -1, n = -1, sep = "", quote =
if(identical(sep, "\n")) "" else "'\"", dec = ".", skip = 0, nlines = 0, na.strings ="NA", flush = FALSE, fill = FALSE, strip.white = FALSE, quiet = FALSE,blank.lines.skip = TRUE, multi.line = TRUE, comment.char = "",
allowEscapes = FALSE, fileEncoding = "", encoding = "unknown", text,
skipNul = FALSE)
  • 参数file为文件的路径,what为读取数据的类型,如逻辑型、整数型、实数型、复数型、字符型、字节型和列表。scan()函数可以套嵌地使用list()函 数
  • 当参数sep = "\n"时,每一行文本作为向量的一个元素读取,当参数为sep = "."时,每一句文本作为向量的一个元素读取,当参数sep为默认值时,每个单词将作为字符向量的一个元素被读取

版权声明:本文为weixin_44330955原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。