Split Data Forms at Specified Locations

Usage

loc_split(x, locs, names = NULL, ...)
"loc_split"(x, locs, names = NULL, ...)
"loc_split"(x, locs, names = NULL, ...)
"loc_split"(x, locs, names = NULL, ...)
"loc_split"(x, locs, names = NULL, ...)
"loc_split"(x, locs, names = NULL, ...)
"loc_split"(x, locs, names = NULL, ...)
"loc_split"(x, locs, names = NULL, ...)

Arguments

x
A data form (list, vector, data.frame, matrix).
locs
A vector of integer locations to split at. If locs contains the index 1, it will be silently dropped.
names
Optional vector of names to give to the list elements.
...
Ignored.

Value

Returns of list of data forms broken at the locs.

Description

Split data forms at specified integer locations.

Note

Two dimensional object will retain dimension (i.e., drop = FALSE is used).

Examples

## character loc_split(LETTERS, c(4, 10, 16))
[[1]] [1] "A" "B" "C" [[2]] [1] "D" "E" "F" "G" "H" "I" [[3]] [1] "J" "K" "L" "M" "N" "O" [[4]] [1] "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
loc_split(LETTERS, c(4, 10, 16), c("dog", "cat", "chicken", "rabbit"))
$dog [1] "A" "B" "C" $cat [1] "D" "E" "F" "G" "H" "I" $chicken [1] "J" "K" "L" "M" "N" "O" $rabbit [1] "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
## numeric loc_split(1:100, c(33, 66))
[[1]] [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 [[2]] [1] 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 [[3]] [1] 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 [31] 96 97 98 99 100
## factor (p_chng <- head(1 + cumsum(rle(as.character(CO2[["Plant"]]))[[1]]), -1))
[1] 8 15 22 29 36 43 50 57 64 71 78
loc_split(CO2[["Plant"]], p_chng)
[[1]] [1] Qn1 Qn1 Qn1 Qn1 Qn1 Qn1 Qn1 Levels: Qn1 < Qn2 < Qn3 < Qc1 < Qc3 < Qc2 < Mn3 < Mn2 < Mn1 < Mc2 < Mc3 < Mc1 [[2]] [1] Qn2 Qn2 Qn2 Qn2 Qn2 Qn2 Qn2 Levels: Qn1 < Qn2 < Qn3 < Qc1 < Qc3 < Qc2 < Mn3 < Mn2 < Mn1 < Mc2 < Mc3 < Mc1 [[3]] [1] Qn3 Qn3 Qn3 Qn3 Qn3 Qn3 Qn3 Levels: Qn1 < Qn2 < Qn3 < Qc1 < Qc3 < Qc2 < Mn3 < Mn2 < Mn1 < Mc2 < Mc3 < Mc1 [[4]] [1] Qc1 Qc1 Qc1 Qc1 Qc1 Qc1 Qc1 Levels: Qn1 < Qn2 < Qn3 < Qc1 < Qc3 < Qc2 < Mn3 < Mn2 < Mn1 < Mc2 < Mc3 < Mc1 [[5]] [1] Qc2 Qc2 Qc2 Qc2 Qc2 Qc2 Qc2 Levels: Qn1 < Qn2 < Qn3 < Qc1 < Qc3 < Qc2 < Mn3 < Mn2 < Mn1 < Mc2 < Mc3 < Mc1 [[6]] [1] Qc3 Qc3 Qc3 Qc3 Qc3 Qc3 Qc3 Levels: Qn1 < Qn2 < Qn3 < Qc1 < Qc3 < Qc2 < Mn3 < Mn2 < Mn1 < Mc2 < Mc3 < Mc1 [[7]] [1] Mn1 Mn1 Mn1 Mn1 Mn1 Mn1 Mn1 Levels: Qn1 < Qn2 < Qn3 < Qc1 < Qc3 < Qc2 < Mn3 < Mn2 < Mn1 < Mc2 < Mc3 < Mc1 [[8]] [1] Mn2 Mn2 Mn2 Mn2 Mn2 Mn2 Mn2 Levels: Qn1 < Qn2 < Qn3 < Qc1 < Qc3 < Qc2 < Mn3 < Mn2 < Mn1 < Mc2 < Mc3 < Mc1 [[9]] [1] Mn3 Mn3 Mn3 Mn3 Mn3 Mn3 Mn3 Levels: Qn1 < Qn2 < Qn3 < Qc1 < Qc3 < Qc2 < Mn3 < Mn2 < Mn1 < Mc2 < Mc3 < Mc1 [[10]] [1] Mc1 Mc1 Mc1 Mc1 Mc1 Mc1 Mc1 Levels: Qn1 < Qn2 < Qn3 < Qc1 < Qc3 < Qc2 < Mn3 < Mn2 < Mn1 < Mc2 < Mc3 < Mc1 [[11]] [1] Mc2 Mc2 Mc2 Mc2 Mc2 Mc2 Mc2 Levels: Qn1 < Qn2 < Qn3 < Qc1 < Qc3 < Qc2 < Mn3 < Mn2 < Mn1 < Mc2 < Mc3 < Mc1 [[12]] [1] Mc3 Mc3 Mc3 Mc3 Mc3 Mc3 Mc3 Levels: Qn1 < Qn2 < Qn3 < Qc1 < Qc3 < Qc2 < Mn3 < Mn2 < Mn1 < Mc2 < Mc3 < Mc1
## list loc_split(as.list(LETTERS), c(4, 10, 16))
[[1]] [[1]][[1]] [1] "A" [[1]][[2]] [1] "B" [[1]][[3]] [1] "C" [[2]] [[2]][[1]] [1] "D" [[2]][[2]] [1] "E" [[2]][[3]] [1] "F" [[2]][[4]] [1] "G" [[2]][[5]] [1] "H" [[2]][[6]] [1] "I" [[3]] [[3]][[1]] [1] "J" [[3]][[2]] [1] "K" [[3]][[3]] [1] "L" [[3]][[4]] [1] "M" [[3]][[5]] [1] "N" [[3]][[6]] [1] "O" [[4]] [[4]][[1]] [1] "P" [[4]][[2]] [1] "Q" [[4]][[3]] [1] "R" [[4]][[4]] [1] "S" [[4]][[5]] [1] "T" [[4]][[6]] [1] "U" [[4]][[7]] [1] "V" [[4]][[8]] [1] "W" [[4]][[9]] [1] "X" [[4]][[10]] [1] "Y" [[4]][[11]] [1] "Z"
## data.frame (vs_change <- head(1 + cumsum(rle(as.character(mtcars[["vs"]]))[[1]]), -1))
[1] 3 5 6 7 8 12 18 22 26 27 28 29 32
loc_split(mtcars, vs_change)
[[1]] mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21 6 160 110 3.9 2.620 16.46 0 1 4 4 Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4 [[2]] mpg cyl disp hp drat wt qsec vs am gear carb Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 [[3]] mpg cyl disp hp drat wt qsec vs am gear carb Hornet Sportabout 18.7 8 360 175 3.15 3.44 17.02 0 0 3 2 [[4]] mpg cyl disp hp drat wt qsec vs am gear carb Valiant 18.1 6 225 105 2.76 3.46 20.22 1 0 3 1 [[5]] mpg cyl disp hp drat wt qsec vs am gear carb Duster 360 14.3 8 360 245 3.21 3.57 15.84 0 0 3 4 [[6]] mpg cyl disp hp drat wt qsec vs am gear carb Merc 240D 24.4 4 146.7 62 3.69 3.19 20.0 1 0 4 2 Merc 230 22.8 4 140.8 95 3.92 3.15 22.9 1 0 4 2 Merc 280 19.2 6 167.6 123 3.92 3.44 18.3 1 0 4 4 Merc 280C 17.8 6 167.6 123 3.92 3.44 18.9 1 0 4 4 [[7]] mpg cyl disp hp drat wt qsec vs am gear carb Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 [[8]] mpg cyl disp hp drat wt qsec vs am gear carb Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 [[9]] mpg cyl disp hp drat wt qsec vs am gear carb Dodge Challenger 15.5 8 318 150 2.76 3.520 16.87 0 0 3 2 AMC Javelin 15.2 8 304 150 3.15 3.435 17.30 0 0 3 2 Camaro Z28 13.3 8 350 245 3.73 3.840 15.41 0 0 3 4 Pontiac Firebird 19.2 8 400 175 3.08 3.845 17.05 0 0 3 2 [[10]] mpg cyl disp hp drat wt qsec vs am gear carb Fiat X1-9 27.3 4 79 66 4.08 1.935 18.9 1 1 4 1 [[11]] mpg cyl disp hp drat wt qsec vs am gear carb Porsche 914-2 26 4 120.3 91 4.43 2.14 16.7 0 1 5 2 [[12]] mpg cyl disp hp drat wt qsec vs am gear carb Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.9 1 1 5 2 [[13]] mpg cyl disp hp drat wt qsec vs am gear carb Ford Pantera L 15.8 8 351 264 4.22 3.17 14.5 0 1 5 4 Ferrari Dino 19.7 6 145 175 3.62 2.77 15.5 0 1 5 6 Maserati Bora 15.0 8 301 335 3.54 3.57 14.6 0 1 5 8 [[14]] mpg cyl disp hp drat wt qsec vs am gear carb Volvo 142E 21.4 4 121 109 4.11 2.78 18.6 1 1 4 2
## matrix (mat <- matrix(1:50, nrow=10))
[,1] [,2] [,3] [,4] [,5] [1,] 1 11 21 31 41 [2,] 2 12 22 32 42 [3,] 3 13 23 33 43 [4,] 4 14 24 34 44 [5,] 5 15 25 35 45 [6,] 6 16 26 36 46 [7,] 7 17 27 37 47 [8,] 8 18 28 38 48 [9,] 9 19 29 39 49 [10,] 10 20 30 40 50
loc_split(mat, c(3, 6, 10))
[[1]] [,1] [,2] [,3] [,4] [,5] [1,] 1 11 21 31 41 [2,] 2 12 22 32 42 [[2]] [,1] [,2] [,3] [,4] [,5] [1,] 3 13 23 33 43 [2,] 4 14 24 34 44 [3,] 5 15 25 35 45 [[3]] [,1] [,2] [,3] [,4] [,5] [1,] 6 16 26 36 46 [2,] 7 17 27 37 47 [3,] 8 18 28 38 48 [4,] 9 19 29 39 49 [[4]] [,1] [,2] [,3] [,4] [,5] [1,] 10 20 30 40 50

See also

run_split, split_vector https://github.com/trinker/loc_split_example for practical usage.