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

Package dplyr version 1.1.4


Parameters

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

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

参数【...】:数据过滤表达式(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 大于相关性别内平均值的行。

相关推荐
夏婵语冰8 小时前
实用R语言机器学习指南:从数据预处理到模型实战(附配套学习资源)
开发语言·学习·r语言
Yolo566Q1 天前
“R语言+遥感”的水环境综合评价方法实践技术应用
开发语言·r语言
天意生信云1 天前
生信分析自学攻略 | R语言数据筛选和修改
数据结构·经验分享·r语言
烟锁池塘柳04 天前
【R语言】R 语言中 gsub 与正则表达式详解(含 POSIX 与 Perl 风格实例)
正则表达式·r语言·perl
梦想的初衷~4 天前
“R+遥感”的水环境综合评价方法实践技术应用
r语言·水环境·水文
天意生信云5 天前
生信分析自学攻略 | R软件和Rstudio的安装
经验分享·r语言
TS的美梦5 天前
【1:1复刻R版】python版火山图函数一键出图
开发语言·python·r语言·scanpy·火山图
nonono5 天前
深度学习——R-CNN及其变体
深度学习·r语言·cnn
烟锁池塘柳06 天前
【R语言】R 语言中打印含有双引号的字符串时会出现 “\” 的原因解析
r语言
全栈开发圈10 天前
干货分享|如何从0到1掌握R语言数据分析
开发语言·数据分析·r语言