R语言:文本处理(字符串处理)的常用函数

文字太多,一眼找不到要找的内容? Ctrl+F 即可查找~

  R语言中处理字符串主要用到base包(R语言自带)和stringr包(需下载安装)的一些函数,现总结如下:

1、字符串长度

  nchar()函数用于计算字符串长度;nzchar()函数则用于判断字符串长度是否大于0,大于0则返回TRUE,否则返回FALSE。

  函数参数设置如下:

  nchar(x, type = "chars",allowNA = FALSE, keepNA = NA)

  nzchar(x, keepNA = FALSE)

  其中,参数x是要测长度的字符串,须是character型向量或者可以转化为character型的向量(如numeric型,但是不能是factor型);

  参数type可以取chars,bytes和width,取chars时返回该字符串可视字符的个数,byte返回该字符串存储字节数,width返回该字符串显示在屏幕上的宽度;

  如果遇到无效的字符串,参数allowNA设为FALSE时函数报错,设为TRUE时,则会返回NA;

  如果遇到缺失值(NA),参数keepNA设为TRUE时,函数返回NA,设为FALSE时,则会将NA转化为字符串进行计算。

x <- c('abcd', 1379, '偷闲阁', NA)
nchar(x)
nchar(x, type = 'bytes')
nchar(x, keepNA = F)

2、查找、替换字符串

  grep系列函数用于字符串的查找和替换。

  grep()返回向量中包含所查找字符(串)的元素在向量中的位置;

  grepl()则对向量中每个元素是否包含所查找的字符(串)进行判断;

  sub()gsub()用于替换字符串中的字符(串),其中sub()用于只对查找到的第一个进行替换,gsub()则替换所有满足条件的字符(串);

  regexpr()gregexpr()regexec()用于查找字符串中要寻找的字符(串)所在位置,若不匹配则返回-1,其中regexpr()和regexec()只会返回第一个满足匹配关系的位置,只是两个函数的输出形式不一样,gregexpr()则返回所有满足匹配关系的位置;

  函数参数设置如下:

  grep(pattern, x, ignore.case = FALSE,perl = FALSE, value = FALSE,

        fixed = FALSE, useBytes = FALSE, invert = FALSE)

  grepl(pattern, x, ignore.case = FALSE,perl = FALSE,

        fixed = FALSE, useBytes = FALSE)

  sub(pattern, replacement, x,ignore.case = FALSE, perl = FALSE,

       fixed = FALSE, useBytes = FALSE)

  gsub(pattern, replacement, x,ignore.case = FALSE, perl = FALSE,

        fixed = FALSE, useBytes = FALSE)

  regexpr(pattern, text, ignore.case =FALSE, perl = FALSE,

            fixed = FALSE, useBytes = FALSE)

  gregexpr(pattern, text, ignore.case =FALSE, perl = FALSE,

             fixed = FALSE, useBytes = FALSE)

  regexec(pattern, text, ignore.case =FALSE, perl = FALSE,

           fixed = FALSE, useBytes = FALSE)

  其中,参数pattern即要查找的字符(串);

  参数x或text是要在其中进行查找的字符串(向量);

  参数replacement是要替换成的字符(串);

  参数fixed为TRUE时采用精确查找;

  参数perl为TRUE时采用Perl正则表达式;

  参数fixed和perl都为FALSE时,使用POSIX1003.2扩展正则表达式;

  参数ignore.case为FALSE时匹配区分大小写,为TRUE时不区分大小写;

  参数value为TRUE时,grep函数的返回值为包含要查找字符串的元素,而不是该元素在向量中的位置;

  参数useBytes为TRUE时,匹配过程是逐字节进行的;

  参数invert为TRUE时,返回的是不匹配的项。

x <- c('describe', 'the', 'city', 'you', 'live', 'in')
grep('i', x)
grep('i', x, invert = T)
grep('i', x, value = T)
regexec('e', x)
regexpr('e', x)
gregexpr('e', x)

x <- 'initial'
sub('i', 'I', x) # 只有第一个i被替换
gsub('i', 'I', x) # 所有i被替换为I

3、拆分字符串

  strsplit()用于字符串的拆分。

  strsplit(x, split, fixed = FALSE, perl= FALSE, useBytes = FALSE)

  其中参数x是要处理的字符串,split是分割点。

x <- '2018-01-11'
strsplit(x, '-')

4、拼接字符串

  paste()用于字符串的拼接。

  paste (..., sep = " ",collapse = NULL)

  paste0(..., collapse = NULL)

  参数...是要进行拼接的字符串,可以是多个元素或向量;

  参数sep是进行元素间拼接时使用的连接符;

  参数collapse是进行向量内拼接时使用的连接符。

a <- c('a', 'b', 'c')
b <- 1:3
paste(a, b)
paste(a, b, sep = '=')

x <- c('describe', 'the', 'city','you', 'live', 'in')
paste(x, collapse = ' ')

5、提取字符串

  substr系列函数用于提取字符串中的字符(串)。

  substr(x, start, stop)

  substring(text, first, last = 1000000L)

  参数x或text是要在其中进行提取的字符串(向量);

  参数start或first是提取的第一个字符所在位置;

  参数stop或last是提取的最后一个字符所在位置。

x <- '鞠躬尽瘁,死而后已。'
substr(x, 1, 4)
# substr和subsring也可以用来替换字符串的内容
substr(x, 1, 4) <- '诸葛亮说'
x
  提取字符串更方便的办法是使用stringr包的str_extract()和str_extract_all()函数。str_extract()只提取满足条件的第一个,str_extract_all()则提取全部。

  str_extract(string, pattern)
  str_extract_all(string, pattern, simplify = FALSE)

  其中,参数string是要处理的文本;

  参数pattern是要提取的字符形式,通常使用正则表达式;

  参数simplify为FALSE时返回的结果是list,为TRUE时返回matrix。

# 将所有数字提取出来
x <- '2018年01月01日'
str_extract(x, '[0-9]+[0-9]')
str_extract_all(x, '[0-9]+[0-9]')
str_extract_all(x, '[0-9]+[0-9]', simplify = T)

 

你可能感兴趣的:(R语言,文本处理)