R语言【dplyr】——filter保留符合筛选条件的行,以数据的行为单位,创建子集

Package dplyr version 1.1.4


Parameters

R 复制代码
filter(.data, ..., .by = NULL, .preverse = FALSE)

参数【.data】:一个数据集(data frame),数据集扩展(比如:tibble),或者 lazy data frames(比如:来自 dbplyr 或 dtplyr)。

参数【...】:数据过滤表达式(data-masking expression),返回的是逻辑值,根据参数【.data】中的变量进行定义。如果包含多个表达式,则使用**&运算符合并。++只保留所有条件判断均为 TRUE 的记录++**。

参数【.by】:<tidy-select>可选的,仅用于此操作的列分组选择,可替代 group_by()。

参数【.preserve】:与参数【.data】分组时相关。如果 .preserve = FALSE(默认值),分组结构将根据生成的数据重新计算,否则分组结构将保持不变。


Tips

**filter()**函数用于创建参数【.data】的子集行,将参数【...】中的表达式应用于列值,以确定应保留哪些行。它既可应用于分组数据,也可应用于未分组数据。然而,dplyr 还不够智能,无法优化不需要分组计算的分组数据集的过滤操作。因此,过滤未分组数据的速度通常要快得多。


Value

**filter()**函数返回一个与参数【.data】相同类型的对象。输出结果具有以下属性:

  • 行是输入的子集,但以相同的顺序出现。
  • 列未作修改。
  • 组的数量可能会减少(如果参数【.preserve】不是 TRUE)。
  • 数据集属性保留不变。

Available filter

在构建用于过滤数据的表达式时,有许多函数和运算符非常有用:

  • ==,>,>= 等等
  • &,|,!,xor()
  • is.na()
  • between(),near()

Process groups

由于**++过滤表达式是在组内计算的++**,因此在分组的 tibbles 上可能会产生不同的结果。只要涉及聚合、滞后或排序功能,就会出现这种情况。

比较一下未分组的过滤:

R 复制代码
starwars %>% filter(mass > mean(mass, na.rm = TRUE))

再理解一下分组的过滤:

R 复制代码
starwars %>% group_by(gender) %>% filter(mass > mean(mass, na.rm = TRUE))

在未分组版本中,**filter()**将每一行的 mass 值与全局平均值(整个数据集的平均值)进行比较,只保留 mass 大于全局平均值的行。与此相反,分组版本会分别计算每个 gender 组的平均 mass ​​​​​​​,并保留 mass 大于相关性别内平均值的行。

相关推荐
Omics Pro9 小时前
~30,000+引用!理论2005,R包2008,多组学集成AI增强
开发语言·数据库·人工智能·算法·机器学习·自然语言处理·r语言
天桥下的卖艺者2 天前
chrals.CTI函数升级版发布,增加了CTI衍生的脂肪指数提取
数据库·r语言
小师兄吃牛肉3 天前
什么是R语言?如何快速学习R语言
开发语言·学习·r语言
喆星时瑜4 天前
Win10/11 安装 R 与 RStudio 详细图文教程
开发语言·r语言·安装
喆星时瑜4 天前
R语言基础语法入门
开发语言·r语言
喆星时瑜4 天前
R语言向量语法的详细教程
开发语言·r语言
临床数据科学和人工智能兴趣组7 天前
在R语言中, 使用 as.factor() 函数转换数值型变量
开发语言·r语言
babe小鑫16 天前
信息与计算科学专业应届生面试 怎么证明自己能解决业务问题
学习·r语言·excel
深兰科技17 天前
深兰科技受邀参与第二届中国(南宁)—东盟人工智能场景应用对接会,深化AI国际合作
人工智能·qt·r语言·scala·symfony·智能机器人·深兰科技
赵钰老师18 天前
基于ArcGIS Pro、R、INVEST等多技术融合下生态系统服务权衡与协同动态分析
python·arcgis·数据分析·r语言