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