R語言基礎(chǔ)入門(2) filter的使用方法從基礎(chǔ)到高級(jí)

今天來介紹tidyverse體系重要的一員dplyr,作為數(shù)據(jù)處理的一大利器dplyr如它的外觀一樣,學(xué)好dplyr的使用數(shù)據(jù)處理將變得異常簡(jiǎn)單,今天來介紹dplyr中過濾函數(shù)filter的使用方法

> iris %>% as_tibble()
# A tibble: 150 x 5
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
          <dbl>       <dbl>        <dbl>       <dbl> <fct>  
 1          5.1         3.5          1.4         0.2 setosa 
 2          4.9         3            1.4         0.2 setosa 
 3          4.7         3.2          1.3         0.2 setosa 
 4          4.6         3.1          1.5         0.2 setosa 
 5          5           3.6          1.4         0.2 setosa 
 6          5.4         3.9          1.7         0.4 setosa 
 7          4.6         3.4          1.4         0.3 setosa 
 8          5           3.4          1.5         0.2 setosa 
 9          4.4         2.9          1.4         0.2 setosa 
10          4.9         3.1          1.5         0.1 setosa 
# … with 140 more rows

還是使用我們熟悉的iris(鳶尾花)數(shù)據(jù)集,可以看到數(shù)據(jù)有5列,150行,數(shù)據(jù)類型為數(shù)據(jù)框;分別表示Sepal.Length(花萼長(zhǎng)度),Sepal.Width(花萼寬度)、Petal.Length(花瓣長(zhǎng)度),Petal.Width(花瓣寬度)、Species(花的類型),其中花有3種類型(setosa、versicolor、virginica)

基本行過濾

篩選出含有setosa的行,注意是 ==

iris %>% as_tibble() %>% filter(Species=="setosa")

篩選出不含有setosa的行,R中!= 代表不等于

iris %>% as_tibble() %>% filter(Species !="setosa")

# 此2種方法結(jié)果一致,處理復(fù)雜數(shù)據(jù)時(shí)推薦第二種
iris %>% as_tibble() %>% filter(!Species %in% "setosa")

根據(jù)2個(gè)關(guān)鍵詞進(jìn)行篩選 通過%in%進(jìn)行判斷

iris %>% as_tibble() %>% 
  filter(.,Species %in% c("setosa","virginica"))

!Species 表示不包含在其中,此處注意前面的.,

iris %>% as_tibble() %>% 
  filter(.,!Species %in% c("setosa","virginica"))

根據(jù)多個(gè)條件進(jìn)行篩選

  • filter(condition1, condition2) 將返回同時(shí)滿足兩個(gè)條件的行
  • filter(condition1, !condition2) 將返回條件一為真但條件二為不成立的所有行
  • filter(condition1 | condition2) 將返回滿足條件1和/或條件2的行
  • filter(xor(condition1, condition2) 將返回僅滿足一個(gè)條件的所有行,而不是同時(shí)滿足兩個(gè)條件的所有行
iris %>% as_tibble() %>% 
  filter(Species=="setosa",Sepal.Length >= 5)

& 在R中表示和的意思與,作用一致;|或的意思

iris %>% as_tibble() %>% 
  filter(.,(Species=="setosa" & !Sepal.Length >= 5))
iris %>% as_tibble() %>% 
  filter(.,(Species=="setosa" | Sepal.Length >= 5))

重點(diǎn)xor

xor只返回僅滿足一個(gè)條件的所有行,而不是同時(shí)滿足兩個(gè)條件的所有行
c(T,F) | c(F,T)2種情況

iris %>% as_tibble() %>% 
  filter(.,xor(Species=="setosa",Sepal.Length >= 5))

可通過以下代碼驗(yàn)證上面的結(jié)果

iris %>% as_tibble() %>% 
  filter(.,(Species=="setosa" & !Sepal.Length >= 5))
iris %>% as_tibble() %>% 
  filter(.,Species!= "setosa",Sepal.Length >= 5)

多條件嵌套過濾

此代碼將首先提取出含有setosa的行,
之后根據(jù)Sepal.Length >= 5這一條件對(duì)其進(jìn)行過濾,
最后將含有versicolor","virginica"的數(shù)據(jù)追加上去

iris %>% as_tibble() %>% 
  filter(.,(Species=="setosa" & Sepal.Length >= 5)|(Species %in% c("versicolor","virginica")))

刪除Species中含有NA的行

iris %>% filter(!is.na(Species))

跨多列過濾

  • filter_all() 過濾所有列
  • filter_if()需要一個(gè)返回的布爾值以指示要過濾列的類型。如果是符合條件則將遵循這些列進(jìn)行過濾
  • filter_at()要求在vars() 參數(shù)中指定要進(jìn)行過濾的列

filter_all( )

對(duì)數(shù)值執(zhí)行全部篩選:此代碼將保留任何值等于5的行

iris %>% filter_all(any_vars(. == 5))

對(duì)字符串進(jìn)行過濾,在所有列中檢索含有"Ca"的字符串,需要將條件包裝在any_vars()中

msleep %>% 
  select(name:order, sleep_total, -vore) %>% 
  filter_all(any_vars(str_detect(., pattern = "Ca")))

filter_if( )

下面這段代碼首先對(duì)列的類型進(jìn)行判斷,再在字符列中篩選NA

msleep %>% 
  select(name:order, sleep_total:sleep_rem) %>% 
  filter_if(is.character, any_vars(is.na(.)))

filter_at( )

filter_at( )它不篩選所有列,也不需要您指定列的類型,可以通過vars() 參數(shù)選擇要對(duì)那些列進(jìn)行篩選

iris %>% 
  filter_at(vars(Sepal.Length,Petal.Length),all_vars(. >=6))
   Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
1           6.3         3.3          6.0         2.5 virginica
2           7.6         3.0          6.6         2.1 virginica
3           7.3         2.9          6.3         1.8 virginica
4           7.2         3.6          6.1         2.5 virginica
5           7.7         3.8          6.7         2.2 virginica
6           7.7         2.6          6.9         2.3 virginica
7           7.7         2.8          6.7         2.0 virginica
8           7.2         3.2          6.0         1.8 virginica
9           7.4         2.8          6.1         1.9 virginica
10          7.9         3.8          6.4         2.0 virginica
11          7.7         3.0          6.1         2.3 virginica
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容