首頁 > 軟體

R語言行篩選的方法之filter函數詳解

2022-07-01 22:02:49

下面介紹一下R語言中行篩選的方法,主要介紹filter函數

1. 資料

這裡,使用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)

資料特點:

  • 沒有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)

根據下劃線,進行分列:

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. 根據部分行名刪選

select函數,可以根據開頭,中間,結尾,進行列的刪選。

filter結合其它函數,也可以進行行的篩選。

如果想對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()函數:

re3 = blup2 %>% filter(str_detect(ID,fixed("vm(Progeny, ainv)"))) %>% arrange(-effect)
head(re3)

總結

到此這篇關於R語言行篩選的方法之filter函數詳解的文章就介紹到這了,更多相關R語言行篩選filter函數內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com