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