Choose rows by their ordinal position in the tbl. Grouped tbls use the ordinal position within the group.

slice(.data, ..., .preserve = FALSE)

Arguments

.data

A tbl.

...

Integer row values. Provide either positive values to keep, or negative values to drop. The values provided must be either all positive or all negative. Indices beyond the number of rows in the input are silently ignored.

The arguments in ... are automatically quoted and evaluated in the context of the data frame. They support unquoting and splicing. See vignette("programming") for an introduction to these concepts.

.preserve

when FALSE (the default), the grouping structure is recalculated based on the resulting data, otherwise it is kept as is.

Details

Slice does not work with relational databases because they have no intrinsic notion of row order. If you want to perform the equivalent operation, use filter() and row_number().

Tidy data

When applied to a data frame, row names are silently dropped. To preserve, convert to an explicit variable with tibble::rownames_to_column().

See also

Other single table verbs: arrange, filter, mutate, select, summarise

Examples

slice(mtcars, 1L)
#> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21 6 160 110 3.9 2.62 16.46 0 1 4 4
# Similar to tail(mtcars, 1): slice(mtcars, n())
#> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.4 4 121 109 4.11 2.78 18.6 1 1 4 2
slice(mtcars, 5:n())
#> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 #> 2 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 #> 3 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 #> 4 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 5 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 6 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 #> 7 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 #> 8 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 #> 9 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 #> 10 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 #> 11 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 #> 12 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 #> 13 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 #> 14 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 #> 15 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 #> 16 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 #> 17 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 #> 18 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 #> 19 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 #> 20 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 #> 21 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 #> 22 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 #> 23 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 #> 24 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 #> 25 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 #> 26 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 #> 27 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 #> 28 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
# Rows can be dropped with negative indices: slice(mtcars, -5:-n())
#> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
# In this case, the result will be equivalent to: slice(mtcars, 1:4)
#> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
by_cyl <- group_by(mtcars, cyl) slice(by_cyl, 1:2)
#> # A tibble: 6 x 11 #> # Groups: cyl [3] #> 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 21 6 160 110 3.9 2.62 16.5 0 1 4 4 #> 4 21 6 160 110 3.9 2.88 17.0 0 1 4 4 #> 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2 #> 6 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4
# Equivalent code using filter that will also work with databases, # but won't be as fast for in-memory data. For many databases, you'll # need to supply an explicit variable to use to compute the row number. filter(mtcars, row_number() == 1L)
#> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21 6 160 110 3.9 2.62 16.46 0 1 4 4
filter(mtcars, row_number() == n())
#> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.4 4 121 109 4.11 2.78 18.6 1 1 4 2
filter(mtcars, between(row_number(), 5, n()))
#> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 #> 2 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 #> 3 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 #> 4 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 5 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 6 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 #> 7 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 #> 8 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 #> 9 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 #> 10 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 #> 11 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 #> 12 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 #> 13 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 #> 14 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 #> 15 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 #> 16 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 #> 17 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 #> 18 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 #> 19 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 #> 20 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 #> 21 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 #> 22 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 #> 23 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 #> 24 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 #> 25 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 #> 26 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 #> 27 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 #> 28 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2