The {portion}
R
package offers convenient
tools to extract data portions from various objects:
works for vector
, matrix
,
data.frame
, and list
objects
the relative portion size can be selected
allows to extract first, last, random, similar or dissimilar data
can portion row- and column-wise
provides selected indices as an attribute
You can install the released version from CRAN with:
install.packages("portion")
Can portion a vector
:
<- c(1:4, 16:20)
x portion(x, proportion = 0.5, how = "similar")
#> [1] 16 17 18 19 20
#> attr(,"indices")
#> [1] 5 6 7 8 9
portion(x, proportion = 0.4, how = "dissimilar")
#> [1] 1 2 16 17
#> attr(,"indices")
#> [1] 1 2 5 6
Can portion a matrix
:
<- matrix(LETTERS[1:24], nrow = 4)
x portion(x, proportion = 0.5, how = "first")
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] "A" "E" "I" "M" "Q" "U"
#> [2,] "B" "F" "J" "N" "R" "V"
#> attr(,"indices")
#> [1] 1 2
portion(x, proportion = 0.5, how = "first", byrow = FALSE)
#> [,1] [,2] [,3]
#> [1,] "A" "E" "I"
#> [2,] "B" "F" "J"
#> [3,] "C" "G" "K"
#> [4,] "D" "H" "L"
#> attr(,"indices")
#> [1] 1 2 3
Can portion a data.frame
:
<- as.data.frame(diag(8))
x portion(x, proportion = 0.3, how = "random")
#> V1 V2 V3 V4 V5 V6 V7 V8
#> 1 1 0 0 0 0 0 0 0
#> 3 0 0 1 0 0 0 0 0
#> 4 0 0 0 1 0 0 0 0
portion(x, proportion = 0.3, how = "random", byrow = FALSE)
#> V3 V4 V8
#> 1 0 0 0
#> 2 0 0 0
#> 3 1 0 0
#> 4 0 1 0
#> 5 0 0 0
#> 6 0 0 0
#> 7 0 0 0
#> 8 0 0 1
Can work on a list
:
<- list(1:5, diag(3), data.frame(1:3, 2:4))
x portion(x, proportion = 0.5, how = "last")
#> [[1]]
#> [1] 3 4 5
#> attr(,"indices")
#> [1] 3 4 5
#>
#> [[2]]
#> [,1] [,2] [,3]
#> [1,] 0 1 0
#> [2,] 0 0 1
#> attr(,"indices")
#> [1] 2 3
#>
#> [[3]]
#> X1.3 X2.4
#> 2 2 3
#> 3 3 4