R字符串處理1

統(tǒng)計

1 捺檬、字符數(shù)統(tǒng)計:nchar()

  • length空字符時計數(shù)為1
  • nchar空字符時計數(shù)為0
> x<-c("R","is","funny")
> nchar(x)
[1] 1 2 5
> length("")
[1] 1
> nchar("")
[1] 0

2 、轉(zhuǎn)化為小寫:tolower()

> DNA <- "AtGCtttACC"
> tolower(DNA)
[1] "atgctttacc"

3 状知、轉(zhuǎn)化為大寫:toupper()

> DNA <- "AtGCtttACC"
> toupper(DNA)
[1] "ATGCTTTACC"

4秽五、替換函數(shù):chartr("","",x)

chartr("A","B",x):字符串x中使用B替換A

> DNA <- "AtGCtttACC"
> chartr("Tt","Bb",DNA)
[1] "AbGCbbbACC"
> chartr("Tt","BB",DNA)
[1] "ABGCBBBACC"

字符串連接

5、字符串連接函數(shù):paste()

> paste("Var",1:5,sep="")
[1] "Var1" "Var2" "Var3" "Var4" "Var5"

> x<-list(a='aaa',b='bbb',c="ccc")
> y<-list(d="163.com",e="qq.com")
> paste(x,y,sep="@")
[1] "aaa@163.com" "bbb@qq.com"  "ccc@163.com"

#增加collapse參數(shù)饥悴,設置分隔符
> paste(x,y,sep="@",collapse=';')
[1] "aaa@163.com;bbb@qq.com;ccc@163.com"
> paste(x,collapse=';')
[1] "aaa;bbb;ccc"

字符串拆分

6坦喘、字符串拆分:strsplit()

語法格式:strsplit(x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE)

  • x為需要拆分的字串向量
  • split為拆分位置的字串向量,默認為正則表達式匹配(fixed=FALSE)西设,
    設置fixed=TRUE瓣铣,表示使用普通文本匹配或正則表達式的精確匹配。普通文本的運算速度快
  • perl=TRUE/FALSE的設置和perl語言版本有關(guān)贷揽,如果正則表達式很長棠笑,正確設置表達式并且使用perl=TRUE可以提高運算速度。
  • useBytes設置是否逐個字節(jié)進行匹配禽绪,默認為FALSE蓖救,即按字符而不是字節(jié)進行匹配洪规。
  • strsplit得到的結(jié)果是列表,后面要怎么處理就得看情況而定了
> text<-"today is a \nnice day!"
> text
[1] "today is a \nnice day!"

> strsplit(text," ")
[[1]]
[1] "today"  "is"     "a"      "\nnice" "day!"

#換行符\n
> strsplit(text,'\\s')
[[1]]
[1] "today" "is"    "a"     ""      "nice"  "day!"
> class(strsplit(text, '\\s'))
[1] "list"

> strsplit(text,"")
[[1]]
 [1] "t"  "o"  "d"  "a"  "y"  " "  "i"  "s"  " "  "a"  " "  "\n" "n"  "i"  "c"  "e"  " "  "d"  "a" 
[20] "y"  "!"

字符串查詢

7循捺、字符串查詢:grep(),grepl()

語法格式

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) 

兩者的差別

  • grep正則匹配后返回匹配項的下標
  • grepl正則匹配后返回邏輯TRUE或者FALSE
> grep("\\.r$",files)
 [1]  3  5  8  9 10 11 12 16 18 20 22 24 25 26 29

 > grepl("\\.r$",files)
 [1] FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE
[17] FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE
[33] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

兩者用于提取數(shù)據(jù)子集的結(jié)果是一樣的

> files[grep("\\.r$",files)]
 [1] "agricolae.r"             "cluster.r"               "gam_model.r"            
 [4] "GBM.r"                   "gbm_model.r"             "gbm_model1.r"           
 [7] "GBM1.r"                  "item-based CF推薦算法.r" "MASS_e107_rpart.r"      
[10] "PankRange.r"             "quantmod.r"              "recommenderlab.r"       
[13] "Rplot.r"                 "rules.r"                 "survival.r" 

> files[grepl("\\.r$",files)]
 [1] "agricolae.r"             "cluster.r"               "gam_model.r"            
 [4] "GBM.r"                   "gbm_model.r"             "gbm_model1.r"           
 [7] "GBM1.r"                  "item-based CF推薦算法.r" "MASS_e107_rpart.r"      
[10] "PankRange.r"             "quantmod.r"              "recommenderlab.r"       
[13] "Rplot.r"                 "rules.r"                 "survival.r"

8斩例、字符串查詢:regexpr(),gregexpr(),regexec()

  • 匹配具體位置和字符串長度
  • 可以用于字符串的提取操作
> text<-c("Hello, Adam","Hi,Adam!","How are you,Adam")
> text
[1] "Hello, Adam"      "Hi,Adam!"         "How are you,Adam"
> regexpr("Adam",text)
[1]  8  4 13
attr(,"match.length")
[1] 4 4 4
attr(,"useBytes")
[1] TRUE
> gregexpr("Adam",text)
[[1]]
[1] 8
attr(,"match.length")
[1] 4
attr(,"useBytes")
[1] TRUE

[[2]]
[1] 4
attr(,"match.length")
[1] 4
attr(,"useBytes")
[1] TRUE

[[3]]
[1] 13
attr(,"match.length")
[1] 4
attr(,"useBytes")
[1] TRUE

> regexec("Adam",text)
[[1]]
[1] 8
attr(,"match.length")
[1] 4

[[2]]
[1] 4
attr(,"match.length")
[1] 4

[[3]]
[1] 13
attr(,"match.length")
[1] 4

字符串替換

9、字符串替換:sub(),gsub()

  • 嚴格地說R語言沒有字符串替換的函數(shù)
  • R語言對參數(shù)都是傳值不傳址
  • sub和gsub的區(qū)別是前者只做一次替換从橘,gsub把滿足條件的匹配都做替換
> text<-c("Hello, Adam","Hi,Adam!","How are you,Ava")
> sub(pattern="Adam",replacement="word",text)
[1] "Hello, word"     "Hi,word!"        "How are you,Ava"
> sub(pattern="Adam|Ava",replacement="word",text)
[1] "Hello, word"      "Hi,word!"         "How are you,word"
> gsub(pattern="Adam|Ava",replacement="word",text)
[1] "Hello, word"      "Hi,word!"         "How are you,word"

字符串提取

  • substr和substring函數(shù)通過位置進行字符串拆分或提取念赶,它們本身并不使用正則表達式
  • 結(jié)合正則表達式函數(shù)regexpr、gregexpr或regexec使用可以非常方便地從大量文本中提取所需信息
    語法格式
substr(x, start, stop) 
substring(text, first, last = 1000000L) 
  • 第 1個參數(shù)均為要拆分的字串向量洋满,第2個參數(shù)為截取的起始位置向量晶乔,第3個參數(shù)為截取字串的終止位置向量
  • substr返回的字串個數(shù)等于第一個參數(shù)的長度
  • substring返回字串個數(shù)等于三個參數(shù)中最長向量長度,短向量循環(huán)使用
> x <- "123456789" 
> substr(x, c(2,4), c(4,5,8)) 
[1] "234" 
> substring(x, c(2,4), c(4,5,8)) 
[1] "234"     "45"      "2345678" 

因為x的向量長度為1牺勾,substr獲得的結(jié)果只有1個字串正罢,
即第2和第3個參數(shù)向量只用了第一個組合:起始位置2,終止位置4驻民。
substring的語句三個參數(shù)中最長的向量為c(4,5,8)翻具,執(zhí)行時按短向量循環(huán)使用的規(guī)則第一個參數(shù)事實上就是c(x,x,x),
第二個參數(shù)就成了c(2,4,2)回还,最終截取的字串起始位置組合為:2-4, 4-5和2-8裆泳。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市柠硕,隨后出現(xiàn)的幾起案子工禾,更是在濱河造成了極大的恐慌,老刑警劉巖蝗柔,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闻葵,死亡現(xiàn)場離奇詭異,居然都是意外死亡癣丧,警方通過查閱死者的電腦和手機槽畔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胁编,“玉大人厢钧,你說我怎么就攤上這事℃页龋” “怎么了早直?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長市框。 經(jīng)常有香客問我莽鸿,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任祥得,我火速辦了婚禮,結(jié)果婚禮上蒋得,老公的妹妹穿的比我還像新娘级及。我一直安慰自己,他們只是感情好额衙,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布饮焦。 她就那樣靜靜地躺著,像睡著了一般窍侧。 火紅的嫁衣襯著肌膚如雪县踢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天伟件,我揣著相機與錄音硼啤,去河邊找鬼。 笑死斧账,一個胖子當著我的面吹牛谴返,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咧织,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼嗓袱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了习绢?” 一聲冷哼從身側(cè)響起渠抹,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎闪萄,沒想到半個月后梧却,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡桃煎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年篮幢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片为迈。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡三椿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出葫辐,到底是詐尸還是另有隱情搜锰,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布耿战,位于F島的核電站蛋叼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜狈涮,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一狐胎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧歌馍,春花似錦握巢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至晓锻,卻和暖如春歌焦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背砚哆。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工独撇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人窟社。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓券勺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親灿里。 傳聞我的和親對象是個殘疾皇子关炼,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 在挖掘分析的過程當中對字符串的處理是極為重要的,且出現(xiàn)也較為頻繁匣吊,R語言作為當前最為流行的開源數(shù)據(jù)分析和可視化平臺...
    果果哥哥BBQ閱讀 5,793評論 0 8
  • 1 儒拂、連接字符串:str_c() sep:連接兩個字符之間插入的符號collapse:連接后,使用哪個字符分割 示...
    一刀YiDao閱讀 484評論 0 1
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,212評論 0 4
  • 有一句話叫做時勢造英雄色鸳,英雄造時勢社痛。那我這什么會有時勢造英雄這一說法呢?世上叫我看的命雀,為什么有時勢造英雄的說法是因...
    天之巔海無涯閱讀 330評論 0 0
  • 學習Docker @(存筆記) [TOC] For Win 官方建議使用 Docker Machines 的實現(xiàn)...
    瀟Shawn紋閱讀 412評論 0 0