文字太多,一眼找不到要找的內容? 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 ...