这些是 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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
