數(shù)據(jù)篩選是在分析中最常用的步驟,如微生物組分析中,你的OTU表、實(shí)驗(yàn)設(shè)計(jì)、物種注釋之間都要不斷篩選,來(lái)進(jìn)行數(shù)據(jù)對(duì)齊,或局部分析。
今天來(lái)詳解一下此函數(shù)的用法。
match
match:匹配兩個(gè)向量,返回x中存在的返回索引或TRUE、FALSE
match函數(shù)使用格式有如下兩種:
第一種方便設(shè)置參數(shù),返回x中元素在table中的位置
1
|
match(x, table, nomatch = NA_integer_, incomparables = NULL) |
第二種簡(jiǎn)潔,返回x中每個(gè)元素在table中是否存在
1
|
x % in % table |
參數(shù)詳解
x: 向量, 要匹配的值;
table: 向量, 被匹配的值;
nomatch: 沒(méi)匹配上的返回值, 必須是整數(shù);
incomparables: 指定不能用來(lái)匹配的值.
match函數(shù)是一個(gè)完全匹配函數(shù), 當(dāng)兩個(gè)元素類型不一樣時(shí), 如果進(jìn)行類型轉(zhuǎn)換后匹配得上的話, 則仍可匹配, 可看下例.
匹配上且返回位置
1
|
match(c(1, "TRUE" ), c(T, 0, "1" )) |
返回3 1,即1位于表中的3號(hào)位,TRUE位于1號(hào)位,且T和TRUE可匹配成功
1
|
c(1, "TRUE" , F) % in % c(T, 0, "1" ) |
返回TRUE TRUE FALSE,表示每個(gè)元素在table中是否存在
pmatch
pmatch函數(shù)是一個(gè)部分匹配函數(shù), 依次從x里面挑出元素, 對(duì)照table進(jìn)行匹配, 若匹配上則剔除匹配上的值, 不再參與下次匹配, duplicate.ok可設(shè)置是否剔除; 對(duì)于某一個(gè)元素,
匹配一共分成三步:
1、如果可以完全匹配, 則認(rèn)為匹配上了, 返回table中的位置;
2、不滿足上述條件, 如果是唯一部分匹配, 則返回table中的位置;
3、不滿足上述條件, 則認(rèn)為沒(méi)有值與其匹配上.
pmatch函數(shù)的格式
1
|
pmatch(x, table, nomatch = NA_integer_, duplicates.ok = FALSE) |
x: 向量, 要匹配的值;
table: 向量, 被匹配的值;
nomatch: 沒(méi)匹配上的返回值, 必須是整數(shù);
duplicates.ok: table里面的元素是否可以適用多次.
默認(rèn)不允許重復(fù)使用table中元素,返回位置1 2 3
1
|
pmatch(rep(1, 3), rep(1, 5)) |
允許重復(fù),返回位置1 1 1
1
|
pmatch(rep(1, 3), rep(1, 5), duplicates.ok = TRUE) |
補(bǔ)充:R語(yǔ)言實(shí)例-數(shù)據(jù)過(guò)濾
1、問(wèn)題
一組數(shù)據(jù),變量有40個(gè),就是40列。
我要做數(shù)據(jù)篩選。
1.第一列中包含語(yǔ)段"a11","a12","b23"。請(qǐng)注意是包含,實(shí)際不存在“a11”,往往是“a1120”之類的信息
2.第二列中不包含“美國(guó)”、“日本”等信息。請(qǐng)注意,也是不包含,而不是不等于。
請(qǐng)問(wèn)具體的R語(yǔ)言語(yǔ)句應(yīng)該怎么寫?
2、解決
假設(shè)樓主的數(shù)據(jù)為一數(shù)據(jù)框,名字為“testdat”,第一列名"a",第二列名"b",則過(guò)濾語(yǔ)句為:
1
|
result<-subset(testdat,grepl( "a11|a12|b23" ,testdat$a) & !grepl( "美國(guó)|日本" ,testdat$b)) |
3、注意
grep()函數(shù)返回的是匹配元素的索引,grepl()返回的是匹配或不匹配的邏輯值:
1
2
|
grep (value = FALSE) returns a vector of the indices of the elements of x that yielded a match (or not, for invert = TRUE. This will be an integer vector unless the input is a long vector grepl returns a logical vector (match or not for each element of x). |
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
原文鏈接:https://metagenome.blog.csdn.net/article/details/84927296