篩選列
除了選取欄位之外,另一種擷取資料集重點的方法是篩選列。這可用 filter() 函式完成。使用 filter() 時,你需要傳入一個 tibble 與一些邏輯條件。例如,若只想保留欄位 x 的值大於 0,且 y 的值等於 z 的列,可以這樣寫:
a_tibble %>%
filter(x > 0, y == z)
在開始練習前,請注意兩點警告。第一,不要把 dplyr 的 filter() 與 stats 套件的 filter() 搞混。第二,sparklyr 會先把你的 dplyr 程式碼轉換成 SQL 資料庫語法,再交由 Spark 執行。這表示目前只支援有限的篩選操作。舉例來說,你不能用類似下列的正規表達式來篩選字串列:
a_tibble %>%
filter(grepl("a regex", x))
translate_sql() 的說明頁面列出可用的功能。你可以安心使用比較運算子,如 >、!= 與 %in%;算術運算子,如 +、^ 與 %%;以及邏輯運算子,如 &、| 與 !。許多數學函式也受支援,例如 log()、abs()、round() 與 sin()。
同之前一樣,目前不支援方括號索引。
本練習屬於課程
使用 R 的 sparklyr:Spark 入門
練習說明
我們已替你建立一個 Spark 連線 spark_conn。連結到儲存在 Spark 中的曲目中繼資料的 tibble 已預先定義為 track_metadata_tbl。
- 和前一題一樣,使用
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
___