The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Extracting a Data Portion

R-CMD-check CRAN status CRAN downloads Codecov test coverage

The {portion} R package offers convenient tools to extract data portions from common R objects:

  1. works for vector, matrix, data.frame, and list objects

  2. the relative portion size can be selected

  3. allows extracting first, last, random, similar, or dissimilar data

  4. can portion row- and column-wise

  5. provides selected indices as an attribute

  6. preserves object attributes

Installation

You can install the released version from CRAN with:

install.packages("portion")

Examples

Portion a vector by selecting similar or dissimilar values:

set.seed(1)
x <- c(1, 1, 2, 2)
portion(x, proportion = 0.5, how = "similar")
#> [1] 1 1
#> attr(,"indices")
#> [1] 1 2
portion(x, proportion = 0.5, how = "dissimilar")
#> [1] 1 2
#> attr(,"indices")
#> [1] 1 3

Portion a matrix row-wise or column-wise:

x <- matrix(LETTERS[1:24], nrow = 4)
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

Portion a data.frame at random. The selected row or column indices are stored in the "indices" attribute.

set.seed(1)
x <- as.data.frame(diag(8))
portion(x, proportion = 0.3, how = "random")
#>   V1 V2 V3 V4 V5 V6 V7 V8
#> 1  1  0  0  0  0  0  0  0
#> 4  0  0  0  1  0  0  0  0
#> 8  0  0  0  0  0  0  0  1
portion(x, proportion = 0.3, how = "random", byrow = FALSE)
#>   V2 V3 V5
#> 1  0  0  0
#> 2  1  0  0
#> 3  0  1  0
#> 4  0  0  0
#> 5  0  0  1
#> 6  0  0  0
#> 7  0  0  0
#> 8  0  0  0

For clustering data frame rows, all non-ignored columns must be numeric or logical. Use ignore to exclude identifiers, labels, or grouping columns from the clustering data while keeping them in the returned object.

x <- data.frame(value = c(1, 1, 5, 5), group = c("a", "a", "b", "b"))
portion(x, proportion = 0.5, how = "similar", ignore = 2)
#>   value group
#> 1     1     a
#> 2     1     a

Portion each element of a list:

x <- list(1:5, diag(3), data.frame(1:3, 2:4))
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

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.