筛选行
除了选择列之外,提取数据集中关键信息的另一种方式是筛选行。这可以通过 filter() 函数完成。要使用 filter(),需要传入一个 tibble 和若干逻辑条件。例如,若只返回列 x 的值大于 0 且 y 的值等于 z 的行,您可以这样写:
a_tibble %>%
filter(x > 0, y == z)
在开始练习之前,请注意两个提示。首先,不要把 dplyr 的 filter() 与 stats 包的 filter() 混淆。其次,sparklyr 会在把代码发送到 Spark 之前,将您的 dplyr 代码转换为 SQL 数据库代码。这意味着目前仅支持有限的筛选操作。例如,您不能使用如下代码通过正则表达式筛选字符行:
a_tibble %>%
filter(grepl("a regex", x))
translate_sql() 的帮助页面说明了可用的功能。您可以放心使用比较运算符,如 >、!= 和 %in%;算术运算符,如 +、^ 和 %%;以及逻辑运算符,如 &、| 和 !。许多数学函数也受支持,例如 log()、abs()、round() 和 sin()。
与之前一样,方括号索引目前不可用。
本练习是课程的一部分
R 中使用 sparklyr 的 Spark 入门
练习说明
已经为您创建了名为 spark_conn 的 Spark 连接。基于存储在 Spark 中的曲目信息,已预定义了一个名为 track_metadata_tbl 的 tibble。
- 与上一个练习相同,使用
select()选择artist_name、release、title和year。 - 将结果管道到
filter()中,筛选出 1960 年代的曲目。
交互式实操练习
通过完成这段示例代码来试试这个练习。
# track_metadata_tbl has been pre-defined
glimpse(track_metadata_tbl)
# Manipulate the track metadata
track_metadata_tbl %>%
# Select columns
___ %>%
# Filter rows
___