日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

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

作者:育種數據分析之放飛自我 ? 更新時間: 2022-08-25 編程語言

下面介紹一下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)

總結

原文鏈接:https://blog.csdn.net/yijiaobani/article/details/122566607

欄目分類
最近更新