這些是 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。