R語言 文字處理(字串處理)的常用函式

2021-08-14 13:17:58 字數 4058 閱讀 9327

文字太多,一眼找不到要找的內容? ctrl+f 即可查詢~

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 <- '2023年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)

文字處理 字串

字串常用操作 漢字到拼音的轉換 x 125 so o x so 175 sh x x sh 7d se e x se 1.250000e 02 d,c 65,65 65,a print format 1 3 保留3位小數 0.333 format 3.5 格式化為百分數 350.000000 for...

R 文字處理 分詞

一 背景 準備對 水滸傳 中人物關係進行探索,無奈 水滸傳 詞庫只有三種型別資料 天魁星呼保義宋江 呼保義宋江 宋江,無法對 天魁星 呼保義 進行分詞,故需要進行預處理,現對此問題進行處理。二 技術路線 思路 觀察現有資料,天罡地煞資料格式規範,容易獲取,江湖稱號 呼保義 稍微複雜,現利用r及其文字...

字串和文字處理技巧

複雜文字分隔 你需要將乙個字串分割為多個字段,但是分隔符 還有周圍的空格 並不是固定的。解決辦法 1 line asdf fjdk afed,fjek,asdf,foo 2 import re 3 re.split r s s line 4 asdf fjdk afed fjek asdf foo ...