這些是 dplyr 泛型 slice_min()
、 slice_max()
和 slice_sample()
的方法。它們使用 filter()
和窗口函數( ROWNUMBER
、 MIN_RANK
或 CUME_DIST
取決於參數)轉換為 SQL。不支持 slice()
、 slice_head()
和 slice_tail()
,因為數據庫表沒有內在順序。
如果數據已分組,則將對每個組執行操作,以便(例如)slice_min(db, x, n = 3)
將選擇每個組中 x
值最小的三行。
用法
# S3 method for tbl_lazy
slice_min(.data, order_by, ..., n, prop, by = NULL, with_ties = TRUE)
# S3 method for tbl_lazy
slice_max(.data, order_by, ..., n, by = NULL, prop, with_ties = TRUE)
# S3 method for tbl_lazy
slice_sample(.data, ..., n, prop, by = NULL, weight_by = NULL, replace = FALSE)
參數
- .data
-
由數據庫查詢支持的惰性 DataFrame 。
- order_by
-
排序依據的變量或變量函數。
- ...
-
不曾用過。
- n, prop
-
提供
n
(行數)或prop
(要選擇的行的比例)。如果兩者均未提供,則將使用n = 1
。如果
n
大於組中的行數(或prop
> 1),結果將被靜默截斷為組大小。如果組大小的比例不是整數,則向下舍入。 - by
-
<
tidy-select
> (可選)僅針對此操作選擇要分組的列,作為group_by()
的替代方案。有關詳細信息和示例,請參閱?dplyr_by。 - with_ties
-
關係應該保持在一起嗎?默認值
TRUE
可能會返回比您請求的行數更多的行。使用 FALSE 忽略聯係,並返回前 n 行。 - weight_by, replace
-
不支持數據庫後端。
例子
library(dplyr, warn.conflicts = FALSE)
db <- memdb_frame(x = 1:3, y = c(1, 1, 2))
db %>% slice_min(x) %>% show_query()
#> <SQL>
#> SELECT `x`, `y`
#> FROM (
#> SELECT *, RANK() OVER (ORDER BY `x`) AS `q01`
#> FROM `dbplyr_006`
#> )
#> WHERE (`q01` <= 1)
db %>% slice_max(x) %>% show_query()
#> <SQL>
#> SELECT `x`, `y`
#> FROM (
#> SELECT *, RANK() OVER (ORDER BY `x` DESC) AS `q01`
#> FROM `dbplyr_006`
#> )
#> WHERE (`q01` <= 1)
db %>% slice_sample() %>% show_query()
#> <SQL>
#> SELECT `x`, `y`
#> FROM (
#> SELECT *, ROW_NUMBER() OVER (ORDER BY RANDOM()) AS `q01`
#> FROM `dbplyr_006`
#> )
#> WHERE (`q01` <= 1)
db %>% group_by(y) %>% slice_min(x) %>% show_query()
#> <SQL>
#> SELECT `x`, `y`
#> FROM (
#> SELECT *, RANK() OVER (PARTITION BY `y` ORDER BY `x`) AS `q01`
#> FROM `dbplyr_006`
#> )
#> WHERE (`q01` <= 1)
# By default, ties are includes so you may get more rows
# than you expect
db %>% slice_min(y, n = 1)
#> # Source: SQL [2 x 2]
#> # Database: sqlite 3.41.2 [:memory:]
#> x y
#> <int> <dbl>
#> 1 1 1
#> 2 2 1
db %>% slice_min(y, n = 1, with_ties = FALSE)
#> # Source: SQL [1 x 2]
#> # Database: sqlite 3.41.2 [:memory:]
#> x y
#> <int> <dbl>
#> 1 1 1
# Non-integer group sizes are rounded down
db %>% slice_min(x, prop = 0.5)
#> # Source: SQL [1 x 2]
#> # Database: sqlite 3.41.2 [:memory:]
#> x y
#> <int> <dbl>
#> 1 1 1
相關用法
- R dbplyr dbplyr_uncount “計數”數據庫表
- R dbplyr db-quote SQL 轉義/引用泛型
- R dbplyr distinct.tbl_lazy 子集不同/唯一行
- R dbplyr backend-teradata 後端:Teradata
- R dbplyr escape 轉義/引用字符串。
- R dbplyr expand.tbl_lazy 擴展 SQL 表以包含所有可能的值組合
- R dbplyr backend-sqlite 後端:SQLite
- R dbplyr pivot_wider.tbl_lazy 將數據從長軸轉向寬軸
- R dbplyr build_sql 構建 SQL 字符串。
- R dbplyr mutate.tbl_lazy 創建、修改和刪除列
- R dbplyr collapse.tbl_sql 計算查詢的結果
- R dbplyr sql_expr 從 R 表達式生成 SQL
- R dbplyr get_returned_rows 提取並檢查返回的行
- R dbplyr count.tbl_lazy 按組計數觀察值
- R dbplyr backend-odbc 後端:ODBC
- R dbplyr head.tbl_lazy 對第一行進行子集化
- R dbplyr copy_inline 在 dbplyr 查詢中使用本地 DataFrame
- R dbplyr backend-oracle 後端:甲骨文
- R dbplyr backend-snowflake 後端:雪花
- R dbplyr lahman 緩存並檢索 Lahman 棒球數據庫的 src_sqlite。
- R dbplyr backend-redshift 後端:紅移
- R dbplyr partial_eval 部分評估表達式。
- R dbplyr group_by.tbl_lazy 按一個或多個變量分組
- R dbplyr tbl_lazy 創建本地惰性 tibble
- R dbplyr backend-hana 後端:SAP HANA
注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Subset rows using their positions。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。