iris %>% as_tibble(,盈彩体育注册(中国)有限公司" />
盈彩体育注册(中国)有限公司
盈彩体育注册(中国)有限公司 您所在的位置:网站首页 盈彩体育注册(中国)有限公司 R语言基础入门(2) filter的使用方法从基础到高级

R语言基础入门(2) filter的使用方法从基础到高级

2024-03-31 18:26:51| 来源: 网络整理

今天来介绍tidyverse体系重要的一员dplyr,作为数据处理的一大利器dplyr如它的外观一样,学好dplyr的使用数据处理将变得异常简单,今天来介绍dplyr中过滤函数filter的使用方法

> iris %>% as_tibble()# A tibble: 150 x 5 Sepal.Length Sepal.Width Petal.Length Petal.Width Species 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(鸢尾花)数据集,可以看到数据有5列,150行,数据类型为数据框;分别表示Sepal.Length(花萼长度),Sepal.Width(花萼宽度)、Petal.Length(花瓣长度),Petal.Width(花瓣宽度)、Species(花的类型),其中花有3种类型(setosa、versicolor、virginica)

基本行过滤

筛选出含有setosa的行,注意是 ==

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

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

iris %>% as_tibble() %>% filter(Species !="setosa")# 此2种方法结果一致,处理复杂数据时推荐第二种iris %>% as_tibble() %>% filter(!Species %in% "setosa")

根据2个关键词进行筛选 通过%in%进行判断

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

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

iris %>% as_tibble() %>% filter(.,!Species %in% c("setosa","virginica"))根据多个条件进行筛选filter(condition1, condition2) 将返回同时满足两个条件的行filter(condition1, !condition2) 将返回条件一为真但条件二为不成立的所有行filter(condition1 | condition2) 将返回满足条件1和/或条件2的行filter(xor(condition1, condition2) 将返回仅满足一个条件的所有行,而不是同时满足两个条件的所有行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))重点xor

xor只返回仅满足一个条件的所有行,而不是同时满足两个条件的所有行即c(T,F) | c(F,T)2种情况

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

可通过以下代码验证上面的结果

iris %>% as_tibble() %>% filter(.,(Species=="setosa" & !Sepal.Length >= 5))iris %>% as_tibble() %>% filter(.,Species!= "setosa",Sepal.Length >= 5)多条件嵌套过滤

此代码将首先提取出含有setosa的行,之后根据Sepal.Length >= 5这一条件对其进行过滤,最后将含有versicolor","virginica"的数据追加上去

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()需要一个返回的布尔值以指示要过滤列的类型。如果是符合条件则将遵循这些列进行过滤filter_at()要求在vars() 参数中指定要进行过滤的列filter_all( )

对数值执行全部筛选:此代码将保留任何值等于5的行

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

对字符串进行过滤,在所有列中检索含有"Ca"的字符串,需要将条件包装在any_vars()中

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

下面这段代码首先对列的类型进行判断,再在字符列中筛选NA

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

filter_at( )它不筛选所有列,也不需要您指定列的类型,可以通过vars() 参数选择要对那些列进行筛选

iris %>% filter_at(vars(Sepal.Length,Petal.Length),all_vars(. >=6)) Sepal.Length Sepal.Width Petal.Length Petal.Width Species1 6.3 3.3 6.0 2.5 virginica2 7.6 3.0 6.6 2.1 virginica3 7.3 2.9 6.3 1.8 virginica4 7.2 3.6 6.1 2.5 virginica5 7.7 3.8 6.7 2.2 virginica6 7.7 2.6 6.9 2.3 virginica7 7.7 2.8 6.7 2.0 virginica8 7.2 3.2 6.0 1.8 virginica9 7.4 2.8 6.1 1.9 virginica10 7.9 3.8 6.4 2.0 virginica11 7.7 3.0 6.1 2.3 virginica


【本文地址】 转载请注明 

最新文章

推荐文章

CopyRight 2018-2019 盈彩体育注册(中国)有限公司 版权所有 豫ICP备16040606号-1