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

您所在的位置:网站首页 sides的用法 R语言基础入门(2) filter的使用方法从基础到高级

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

2023-10-08 15:54| 来源: 网络整理| 查看: 265

今天来介绍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 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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3