@stdlib/utils-tabulate-by
v0.2.2
Published
Generate a frequency table according to an indicator function.
Downloads
17
Readme
tabulateBy
Generate a frequency table according to an indicator function.
Installation
npm install @stdlib/utils-tabulate-by
Usage
var tabulateBy = require( '@stdlib/utils-tabulate-by' );
tabulateBy( collection[, options,] indicator )
Generates a frequency table according to an indicator
function, i.e., a function which specifies how to categorize an element in the input collection
.
function indicator( v ) {
return v[ 0 ];
}
var arr = [ 'beep', 'boop', 'foo', 'beep' ];
var out = tabulateBy( arr, indicator );
// returns [ [ 'b', 3, 0.75 ], [ 'f', 1, 0.25 ] ]
An indicator
function is provided two arguments:
value
: collection elementindex
: collection index
function indicator( v, i ) {
console.log( '%d: %s', i, v );
return v[ 0 ];
}
var arr = [ 'beep', 'boop', 'foo', 'bar' ];
var out = tabulateBy( arr, indicator );
// returns [ [ 'b', 3, 0.75 ], [ 'f', 1, 0.25 ] ]
The function accepts the following options
:
thisArg
: execution context.
To set the indicator
execution context, provide a thisArg
.
function indicator( v ) {
this.count += 1;
return v[ 0 ];
}
var context = {
'count': 0
};
var opts = {
'thisArg': context
};
var arr = [ 'beep', 'boop', 'foo', 'bar' ];
var out = tabulateBy( arr, opts, indicator );
// returns [ [ 'b', 3, 0.75 ], [ 'f', 1, 0.25 ] ]
console.log( context.count );
// => 4
The returned frequency table is an array
of arrays
. Each sub-array corresponds to a unique value in the input collection
and is structured as follows:
0
: unique value1
: value count2
: frequency percentage
Notes
- A
collection
may be either anArray
,Typed Array
, or an array-likeObject
(excludingstrings
andfunctions
).
Examples
var randu = require( '@stdlib/random-base-randu' );
var floor = require( '@stdlib/math-base-special-floor' );
var tabulateBy = require( '@stdlib/utils-tabulate-by' );
var vals;
var arr;
var out;
var i;
var j;
function indicator( value ) {
return value[ 0 ];
}
vals = [ 'beep', 'boop', 'foo', 'bar', 'woot', 'woot' ];
// Generate a random collection...
arr = new Array( 100 );
for ( i = 0; i < arr.length; i++ ) {
j = floor( randu()*vals.length );
arr[ i ] = vals[ j ];
}
// Generate a frequency table:
out = tabulateBy( arr, indicator );
console.log( out );
See Also
@stdlib/utils-count-by
: group values according to an indicator function and return group counts.@stdlib/utils-group-by
: group values according to an indicator function.@stdlib/utils-tabulate
: generate a frequency table.
Notice
This package is part of stdlib, a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more.
For more information on the project, filing bug reports and feature requests, and guidance on how to develop stdlib, see the main project repository.
Community
License
See LICENSE.
Copyright
Copyright © 2016-2024. The Stdlib Authors.