R語言行篩選的方法之filter函數(shù)詳解
下面介紹一下R語言中行篩選的方法,主要介紹filter函數(shù)
1. 數(shù)據(jù)
這里,使用asreml分析中的BLUP值為例,相關的模型為:
m1 = asreml(Phen ~ G , random = ~ vm(Progeny,ainv) + vm(Dam,ainv) + vm(Progeny,dinv), workspace = "10Gb", residual = ~ idv(units),data = dat) summary(m1)$varcomp
計算育種值:
blup = coef(m1)$random head(blup) tail(blup)
數(shù)據(jù)特點:
- 沒有ID列,rownames的前綴為類型,比如
vm(Progeny, ainv)
為加性效應的BLUP值,vm(Progeny,dinv)
為顯性效應的BLUP值。
提取目的:
- 提取加性效應的BLUP值,顯性效應的BLUP值和母體效應的BLUP
- 值提取BLUP值大于0.1的個體
2. 生成ID列和類型
首先,把rowname提取,作為新的一列
blup1 = blup %>% as.data.frame() %>% mutate(ID = rownames(.)) head(blup1)
根據(jù)下劃線,進行分列:
blup2 = blup1 %>% separate(ID,into = c("Type","IID"),sep = "_",remove = F) head(blup2)
3. 提取effect大于0.1的行
re1 = blup2 %>% filter(effect>0.1) head(re1)
4. 提取加性效應,且effect小于0的行
這里,條件之間,默認是并集,如果想用交集,用|間隔。
re2 = blup2 %>% filter(Type == "vm(Progeny, ainv)",effect <0) head(re2)
5. 根據(jù)部分行名刪選
select函數(shù),可以根據(jù)開頭,中間,結尾,進行列的刪選。
filter結合其它函數(shù),也可以進行行的篩選。
如果想對ID中,包含ainv的行,進行篩選,可以這樣操作:
re3 = blup2 %>% filter(str_detect(ID,"ainv")) %>% arrange(-effect) head(re3)
注意,這里str_detect的pattern是正則表達式。如果直接用原始的字符:
re3 = blup2 %>% filter(str_detect(ID,"vm(Progeny, ainv)")) %>% arrange(-effect) head(re3)
可以看到,報錯,如果想要支持,需要對括號用兩個反斜線進行轉義。
轉義后的代碼:
re3 = blup2 %>% filter(str_detect(ID,"vm\\(Progeny, ainv\\)")) %>% arrange(-effect) head(re3)
6. 固定字符特征進行行篩選
str_detect沒有fixed = T的選項,如果想固定字符匹配,可以用fixed()函數(shù):
re3 = blup2 %>% filter(str_detect(ID,fixed("vm(Progeny, ainv)"))) %>% arrange(-effect) head(re3)
總結
到此這篇關于R語言行篩選的方法之filter函數(shù)詳解的文章就介紹到這了,更多相關R語言行篩選filter函數(shù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
R語言實現(xiàn)用cbind合并兩列數(shù)據(jù)
這篇文章主要介紹了R語言實現(xiàn)用cbind合并兩列數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04