这些是 dplyr slice()
、 slice_head()
、 slice_tail()
、 slice_min()
、 slice_max()
和 slice_sample()
泛型的方法。它们被转换为 [.data.table
的 i
参数。
用法
# S3 method for dtplyr_step
slice(.data, ..., .by = NULL)
# S3 method for dtplyr_step
slice_head(.data, ..., n, prop, by = NULL)
# S3 method for dtplyr_step
slice_tail(.data, ..., n, prop, by = NULL)
# S3 method for dtplyr_step
slice_min(.data, order_by, ..., n, prop, by = NULL, with_ties = TRUE)
# S3 method for dtplyr_step
slice_max(.data, order_by, ..., n, prop, by = NULL, with_ties = TRUE)
参数
- .data
-
一个
lazy_dt()
。 - ...
-
对于
slice()
: <data-masking
> 整数行值。提供要保留的正值或要删除的负值。提供的值必须全部为正值或全部为负值。超出输入行数的索引将被静默忽略。
对于
slice_*()
,这些参数将传递给方法。 - .by, by
-
<
tidy-select
> (可选)仅针对此操作选择要分组的列,作为group_by()
的替代方案。有关详细信息和示例,请参阅?dplyr_by。 - n, prop
-
提供
n
(行数)或prop
(要选择的行的比例)。如果两者均未提供,则将使用n = 1
。如果n
大于组中的行数(或prop > 1
),结果将被静默截断为组大小。prop
将向零舍入以生成整数行。将从组大小中减去负值
n
或prop
。例如,n = -2
具有 5 行一组,将选择 5 - 2 = 3 行;prop = -0.25
有 8 行将选择 8 * (1 - 0.25) = 6 行。 - order_by
-
<
data-masking
> 用于排序的变量或变量函数。要按多个变量排序,请将它们包装在 DataFrame 或小标题中。 - with_ties
-
关系应该保持在一起吗?默认值
TRUE
可能会返回比您请求的行数更多的行。使用FALSE
忽略联系,并返回前n
行。
例子
library(dplyr, warn.conflicts = FALSE)
dt <- lazy_dt(mtcars)
dt %>% slice(1, 5, 10)
#> Source: local data table [3 x 11]
#> Call: `_DT37`[{
#> .rows <- c(1, 5, 10)
#> .rows[between(.rows, -.N, .N)]
#> }]
#>
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
#> 2 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
#> 3 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
dt %>% slice(-(1:4))
#> Source: local data table [28 x 11]
#> Call: `_DT37`[{
#> .rows <- -(1:4)
#> .rows[between(.rows, -.N, .N)]
#> }]
#>
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
#> 2 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1
#> 3 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4
#> 4 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
#> 5 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2
#> 6 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4
#> # … with 22 more rows
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
# First and last rows based on existing order
dt %>% slice_head(n = 5)
#> Source: local data table [5 x 11]
#> Call: `_DT37`[rlang::seq2(1L, min(5L, .N))]
#>
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
#> 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
#> 3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
#> 4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
#> 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
dt %>% slice_tail(n = 5)
#> Source: local data table [5 x 11]
#> Call: `_DT37`[rlang::seq2(.N - min(5L, .N) + 1L, .N)]
#>
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 30.4 4 95.1 113 3.77 1.51 16.9 1 1 5 2
#> 2 15.8 8 351 264 4.22 3.17 14.5 0 1 5 4
#> 3 19.7 6 145 175 3.62 2.77 15.5 0 1 5 6
#> 4 15 8 301 335 3.54 3.57 14.6 0 1 5 8
#> 5 21.4 4 121 109 4.11 2.78 18.6 1 1 4 2
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
# Rows with minimum and maximum values of a variable
dt %>% slice_min(mpg, n = 5)
#> Source: local data table [5 x 11]
#> Call: setorder(`_DT37`[rank(mpg, ties.method = "min", na.last = "keep") <=
#> min(5L, .N)], mpg, na.last = TRUE)
#>
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 10.4 8 472 205 2.93 5.25 18.0 0 0 3 4
#> 2 10.4 8 460 215 3 5.42 17.8 0 0 3 4
#> 3 13.3 8 350 245 3.73 3.84 15.4 0 0 3 4
#> 4 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4
#> 5 14.7 8 440 230 3.23 5.34 17.4 0 0 3 4
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
dt %>% slice_max(mpg, n = 5)
#> Source: local data table [5 x 11]
#> Call: setorder(`_DT37`[rank(desc(mpg), ties.method = "min", na.last = "keep") <=
#> min(5L, .N)], -mpg, na.last = TRUE)
#>
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 33.9 4 71.1 65 4.22 1.84 19.9 1 1 4 1
#> 2 32.4 4 78.7 66 4.08 2.2 19.5 1 1 4 1
#> 3 30.4 4 75.7 52 4.93 1.62 18.5 1 1 4 2
#> 4 30.4 4 95.1 113 3.77 1.51 16.9 1 1 5 2
#> 5 27.3 4 79 66 4.08 1.94 18.9 1 1 4 1
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
# slice_min() and slice_max() may return more rows than requested
# in the presence of ties. Use with_ties = FALSE to suppress
dt %>% slice_min(cyl, n = 1)
#> Source: local data table [11 x 11]
#> Call: setorder(`_DT37`[rank(cyl, ties.method = "min", na.last = "keep") <=
#> min(1L, .N)], cyl, na.last = TRUE)
#>
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
#> 2 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
#> 3 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2
#> 4 32.4 4 78.7 66 4.08 2.2 19.5 1 1 4 1
#> 5 30.4 4 75.7 52 4.93 1.62 18.5 1 1 4 2
#> 6 33.9 4 71.1 65 4.22 1.84 19.9 1 1 4 1
#> # … with 5 more rows
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
dt %>% slice_min(cyl, n = 1, with_ties = FALSE)
#> Source: local data table [1 x 11]
#> Call: setorder(`_DT37`[rank(cyl, ties.method = "first", na.last = "keep") <=
#> min(1L, .N)], cyl, na.last = TRUE)
#>
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
# slice_sample() allows you to random select with or without replacement
dt %>% slice_sample(n = 5)
#> Source: local data table [5 x 11]
#> Call: `_DT37`[sample.int(.N, min(min(5L, .N), .N))]
#>
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 15.8 8 351 264 4.22 3.17 14.5 0 1 5 4
#> 2 30.4 4 95.1 113 3.77 1.51 16.9 1 1 5 2
#> 3 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
#> 4 33.9 4 71.1 65 4.22 1.84 19.9 1 1 4 1
#> 5 14.7 8 440 230 3.23 5.34 17.4 0 0 3 4
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
dt %>% slice_sample(n = 5, replace = TRUE)
#> Source: local data table [5 x 11]
#> Call: `_DT37`[sample.int(.N, min(5L, .N), replace = TRUE)]
#>
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 33.9 4 71.1 65 4.22 1.84 19.9 1 1 4 1
#> 2 15.5 8 318 150 2.76 3.52 16.9 0 0 3 2
#> 3 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2
#> 4 17.8 6 168. 123 3.92 3.44 18.9 1 0 4 4
#> 5 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
# you can optionally weight by a variable - this code weights by the
# physical weight of the cars, so heavy cars are more likely to get
# selected
dt %>% slice_sample(weight_by = wt, n = 5)
#> Source: local data table [5 x 11]
#> Call: `_DT37`[sample.int(.N, min(min(5L, .N), .N), prob = wt)]
#>
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
#> 2 10.4 8 460 215 3 5.42 17.8 0 0 3 4
#> 3 13.3 8 350 245 3.73 3.84 15.4 0 0 3 4
#> 4 10.4 8 472 205 2.93 5.25 18.0 0 0 3 4
#> 5 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
相关用法
- R dtplyr summarise.dtplyr_step 将每组汇总为一行
- R dtplyr select.dtplyr_step 使用名称对列进行子集化
- R dtplyr separate.dtplyr_step 使用正则表达式或数字位置将字符列分成多列
- R dtplyr lazy_dt 创建一个“惰性”data.table 以与 dplyr 动词一起使用
- R dtplyr group_modify.dtplyr_step 对每个组应用一个函数
- R dtplyr transmute.dtplyr_step 创建新列,删除旧列
- R dtplyr left_join.dtplyr_step 连接数据表
- R dtplyr fill.dtplyr_step 用上一个或下一个值填充缺失值
- R dtplyr filter.dtplyr_step 使用列值对行进行子集化
- R dtplyr mutate.dtplyr_step 创建和修改列
- R dtplyr distinct.dtplyr_step 子集不同/唯一行
- R dtplyr unite.dtplyr_step 通过将字符串粘贴在一起将多列合并为一列。
- R dtplyr nest.dtplyr_step 巢
- R dtplyr relocate.dtplyr_step 使用变量名称重新定位变量
- R dtplyr head.dtplyr_step 对第一行或最后一行进行子集化
- R dtplyr expand.dtplyr_step 扩展 DataFrame 以包含所有可能的值组合。
- R dtplyr group_by.dtplyr_step 分组和取消分组
- R dtplyr intersect.dtplyr_step 设置操作
- R dtplyr pivot_wider.dtplyr_step 将数据从长轴转向宽轴
- R dtplyr count.dtplyr_step 按组计数观察值
- R dtplyr drop_na.dtplyr_step 删除包含缺失值的行
- R dtplyr complete.dtplyr_step 完成缺少数据组合的 DataFrame
- R dtplyr collect.dtplyr_step 强制计算惰性 data.table
- R dtplyr arrange.dtplyr_step 按列值排列行
- R dtplyr rename.dtplyr_step 使用名称重命名列
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Subset rows using their positions。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。