Learn R Programming

DescTools (version 0.99.19)

PartitionBy: PartitionBy Evaluates a Function Groupwise

Description

Split the vector x into partitions and apply the function to each partition separately. Computation restarts for each partition. The logic is the same as the OLAP functions in SQL, e.g. SUM(x) OVER (PARTITION BY group).

Usage

PartitionBy(x, by, FUN, ...)

Arguments

x
an atomic object, typically a vector.

by
list of one or more factors, each of same length as X. The elements are coerced to factors by as.factor.

FUN
Function to apply for each factor level combination.

...
optional arguments to FUN: the Note section.

Value

Details

This is more or less the same as the function ave, with the arguments organized a bit different.

See Also

ave, tapply

Examples

Run this code
d.frm <- data.frame(x=rep(1:4,3), v=sample(x=1:3, size=12, replace=TRUE), 
                    g=gl(4,3,labels=letters[1:4]), m=gl(3,4,labels=LETTERS[1:3]))

# SQL-OLAP: sum() over (partition by g)
PartitionBy(d.frm$x, d.frm$g, FUN=sum)
PartitionBy(d.frm$x, FUN=sum)

# more than 1 grouping variables are organized as list as in tapply:
PartitionBy(d.frm$x, list(d.frm$g, d.frm$m), mean)

# count
d.frm$count <- PartitionBy(d.frm$x, d.frm$g, length)

# rank
d.frm$rank <- PartitionBy(d.frm$v, d.frm$g, rank)
d.frm$dense_rank <- PartitionBy(d.frm$v, d.frm$g, DenseRank)
d.frm$rank_desc <- PartitionBy(d.frm$x, d.frm$g, function(x) rank(-x))

# row_number
d.frm$row_number <- PartitionBy(d.frm$v, d.frm$g, function(x) order(x))
d.frm

Run the code above in your browser using DataLab