R之字符串操作

本文來源于陳興棟弊知、張鐵軍阻逮、劉振球老師編寫的《R語言與數據清洗》第11章字符串的操作學習筆記。

1. 字符串的長度

length():統(tǒng)計字符串的長度秩彤,一個引號之內屬于一個字符串叔扼;
nchar():統(tǒng)計字符串之內的字符數

x <- "R"
y <- "I love R"
length(x)
## [1] 1
length(y)
## [1] 1
my_string <- "I love China"
nchar(my_string)
##[1] 12

注意:一個向量之中,只要包含一個字符串漫雷,即使其余元素不是字符串瓜富,也會轉變?yōu)樽址6址滞蔀橐蜃幼兞拷淀铩与柑?梢酝ㄟ^以下修改:options(stringsAsFactors = FALSE) #禁止chr轉成factor

2. 字符串的粘貼與拆分

paste():參數:sep默認為空格,可以自己調整蓄坏;
參數:collapse价捧, 用來將所有返回的結果合并成一個完整而獨立的字符串。默認取值NULL剑辫,即不進行合并干旧。、
paste0():無縫粘貼妹蔽。
strsplit():字符串的分割函數椎眯,可以指定分割符挠将,生成一個list

 a <- letters[1:4]
 b <- 1:4
paste(a,b,sep = "-",collapse = ";")
## [1] "a-1;b-2;c-3;d-4"
a <- "I love"
 b <- "China"
 paste0(a,b)
## "I loveChina"
my_string2 <- "I love China"
 strsplit(my_string2,split = " ")
## [[1]]
## [1] "I"     "love"  "China"

 my_string3 <- "R is a program;R is proficient at data science;R is excellent in data visualization"
 strsplit(my_string3,split = ";")
## [[1]]
## [1] "R is a program"                       "R is proficient at data science"      "R is excellent in data visualization"

 x <- "AppleBoyCatDogEggZoo"
 strsplit(x,split = '[A-Z]')
## [[1]]
## [1] ""     "pple" "oy"   "at"   "og"   "gg"   "oo"  

 y <- "Apple!Boy#Cat@Dog%Egg&Zoo"
 strsplit(y,split = "\\W")

## [[1]]
## [1] "Apple" "Boy"   "Cat"   "Dog"   "Egg"   "Zoo"  

3. 字符串提取

substr():參數start, stop
substring()參數first, last
另外,這兩個函數還有賦值替換功能编整。

substr("abcdef",start = 1, stop = 3)
substring("abcdef",first = 1, last = 3)

x <- c("Barcelona","Real Madrid","Arsenal","Chelsea")
substr(x,1,3:6)

substr(x,1,3) <- "+++"
#x的第一位到第三位字符被替換為“+++”舔稀;

substr(x,1,1) <- "<<<"
#雖然“<<<”有三個字符,但是由于我們指定的替換位置只有一個字符長度掌测,因此内贮,僅有第一個字符被替換成“<”

4. gsub和sub

字符串替換
gsub替換匹配到的全部
sub 替換匹配到的第一個

# 將b替換為B
gsub(pattern = "b", replacement = "B", x = "baby")
[1] "BaBy"

gsub(pattern = "b", replacement = "B", x = c("abcb", "boy", "baby"))
[1] "aBcB" "Boy"  "BaBy"

# 只替換第一個b
sub(pattern = "b", replacement = "B", x = "baby")
[1] "Baby"

sub(pattern = "b", replacement = "B", x = c("abcb", "baby"))
[1] "aBcb" "Baby"

5.grep和grepl

字符串匹配
grep函數返回的是索引值
grepl函數返回的是邏輯值

seq_names <- c('EU_FRA02_C1_S2008','AF_COM12_B0_2004','AF_COM17_F0_S2008','AS_CHN11_C3_2004',
               'EU-FRA-C3-S2007','NAUSA02E02005', 'AS_CHN12_N0_05','NA_USA03_C2_S2007','NA USA04 A3 2004',
               'EU_UK01_A0_2009','eu_fra_a2_s98', 'SA/BRA08/B0/1996')

fra_seq <- grep(pattern = 'FRA|fra', x = seq_names)
fra_seq
seq_names[fra_seq]

grep(pattern = 'FRA|fra', x = seq_names, value = TRUE)

grepl(pattern = 'FRA|fra', x = seq_names)

seq_names[grepl(pattern = 'FRA|fra', x = seq_names)]

spe_seq <- seq_names[which(! grepl('[s|S][0-9]{2,4}\\b', seq_names))]
#[]表示具體的匹配對象
#{}表示前面的表達式重復的次數
#\\b,b是“boundary"的縮寫汞斧,限制字符的邊界夜郁,\\b放在開頭,則正則表達式應用于開頭粘勒;\\b放在末尾竞端,則正則表達式應用于末尾
spe_seq

a_seq <- grep('[a|A][0-9]{1}', seq_names, value = TRUE)
a_seq

a_seq02 <- grep('^[A-Za-z]{2}.[A-Za-z]{2,3}.[0-9]{0,2}.[aA]',seq_names,value = TRUE)
a_seq02

6. regexpr()函數

匹配的具體位置和字符串長度

test_string <- c('happy', 'apple','application','apolitic','noppppy')
regexpr('pp',test_string)
## [1]  3  2  2 -1  3
attr(,"match.length")
## [1]  2  2  2 -1  2
attr(,"index.type")
### [1] "chars"
attr(,"useBytes")
### [1] TRUE

7. gregexpr和regexex函數

gregexpr(pattern,text)函數可以在字符串x中提取出特定字符串pattern的相關信息,返回第一次的匹配結果(原文)庙睡,但是根據下面的結果來說不是這樣的事富,原因以后探索。
regexex(pattern,text)函數可以在字符串x中提取出特定字符串pattern的相關信息乘陪,返回所有匹配到的結果
兩者都是以列表的形式返回結果统台。

test_string <- c('happy', 'apple','application','apolitic','noppppy') 
gregexpr('pp',test_string)
[[1]]
[1] 3
attr(,"match.length")
[1] 2
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE

[[2]]
[1] 2
attr(,"match.length")
[1] 2
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE

[[3]]
[1] 2
attr(,"match.length")
[1] 2
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE

[[4]]
[1] -1
attr(,"match.length")
[1] -1
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE

[[5]]
[1] 3 5
attr(,"match.length")
[1] 2 2
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE

> regexec('pp',test_string)
[[1]]
[1] 3
attr(,"match.length")
[1] 2
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE

[[2]]
[1] 2
attr(,"match.length")
[1] 2
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE

[[3]]
[1] 2
attr(,"match.length")
[1] 2
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE

[[4]]
[1] -1
attr(,"match.length")
[1] -1
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE

[[5]]
[1] 3
attr(,"match.length")
[1] 2
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE

8. agrep()函數

允許通假字的存在,這個比喻形象啡邑。

test_string4 <- c('I need a favor', 'my favouriate book','you made a favouur')
agrep('favor',test_string4, max.distance = 1) #max.distance 改變最大匹配距離
##[1] 1 2 3

9. 大小寫替換函數:toupper()贱勃、tolower()、casefold()

toupper()函數:將字符串統(tǒng)一轉換為大寫谣拣。
tolower()函數:將字符串統(tǒng)一轉換為小寫募寨。
casefold()函數:根據參數轉換大小寫。
chartr (old,new,x)森缠,chartr-將對象中舊的字符用新的字符替代拔鹰。其中參數old 表示原有字符串中內容;new 表示替換后的字符內容贵涵。
??tolower(x)
??toupper(x)
??casefold(x, upper = FALSE)
??chartr(old, new, x)

### 這兩個函數就不用多介紹了列肢,按字面意思就是把對象轉換成大寫或小寫,應用于全部的對象宾茂,例如:
toupper("abc")
##[1]"ABC"
tolower("ABC")
##[1]"abc"
x<-c("My","First","Trip")
tolower(x)
## [1] "my" "first" "trip"

casefold('ABDATA', upper = FALSE)
##[1] "abdata"
casefold('baorui', upper = FALSE)
## [1] "baorui"
casefold('baorui', upper = TRUE)
## [1] "BAORUI"
# 這里這只提供全部應用的大小寫轉換瓷马,部分轉換可以參照函數chartr()。
chartr(old, new, x)

10. match 匹配元素位置組成的向量

match按向量進行運算跨晴,返回第一次匹配的元素的位置(如果有)欧聘,非字符向量也可用。

match("xx", c("abc", "xx", "xxx", "xx"))
## [1] 2

參考:陳興棟端盆、張鐵軍怀骤、劉振球老師《R語言與數據清洗》

生信技能樹公益視頻合輯:學習順序是linux费封,r,軟件安裝蒋伦,geo弓摘,小技巧,ngs組學痕届!
B站鏈接
YouTube鏈接
生信工程師入門最佳指南
學徒培養(yǎng)

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末韧献,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子研叫,更是在濱河造成了極大的恐慌锤窑,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蓝撇,死亡現場離奇詭異果复,居然都是意外死亡陈莽,警方通過查閱死者的電腦和手機渤昌,發(fā)現死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來走搁,“玉大人独柑,你說我怎么就攤上這事∷街玻” “怎么了忌栅?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長曲稼。 經常有香客問我索绪,道長,這世上最難降的妖魔是什么贫悄? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任瑞驱,我火速辦了婚禮,結果婚禮上窄坦,老公的妹妹穿的比我還像新娘唤反。我一直安慰自己,他們只是感情好鸭津,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布彤侍。 她就那樣靜靜地躺著,像睡著了一般逆趋。 火紅的嫁衣襯著肌膚如雪盏阶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天闻书,我揣著相機與錄音名斟,去河邊找鬼吴汪。 笑死,一個胖子當著我的面吹牛蒸眠,可吹牛的內容都是我干的漾橙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼楞卡,長吁一口氣:“原來是場噩夢啊……” “哼霜运!你這毒婦竟也來了?” 一聲冷哼從身側響起蒋腮,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤淘捡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后池摧,有當地人在樹林里發(fā)現了一具尸體焦除,經...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年作彤,在試婚紗的時候發(fā)現自己被綠了膘魄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡竭讳,死狀恐怖创葡,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情绢慢,我是刑警寧澤灿渴,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站胰舆,受9級特大地震影響骚露,放射性物質發(fā)生泄漏。R本人自食惡果不足惜缚窿,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一棘幸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧滨攻,春花似錦够话、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至诞帐,卻和暖如春欣尼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工愕鼓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钙态,地道東北人。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓菇晃,卻偏偏與公主長得像册倒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子磺送,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內容

  • 官網 中文版本 好的網站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,407評論 0 5
  • 第3章 基本概念 3.1 語法 3.2 關鍵字和保留字 3.3 變量 3.4 數據類型 5種簡單數據類型:Unde...
    RickCole閱讀 5,130評論 0 21
  • R語言主要擅長于數值向量和矩陣操作驻子,但是讓他去做字符串操作也可以。 字符串的基本操作類型: 查找和替換 大小寫轉換...
    xuzhougeng閱讀 5,949評論 1 7
  • 20171205(從有道遷移) 高級數據管理 示例問題:給所有學生確定一個單一的成績衡量指標估灿,需要將這些科目的成績...
    KrisKC閱讀 455評論 0 0
  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創(chuàng)建并操作數組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,238評論 0 4