Tidyverse-style Ops

80+ Data Operations, R-style API

Every operation R’s dplyr users expect — filter, cumsum, rank, lag, lead, sort, mean, median —
all backed by Kahan-compensated summation and deterministic BTreeMap ordering.

filter_mask
cumsum
cumprod
rank
lag
lead
dense_rank
row_number
sort
mean
median
quantile
cummax
cummin
ntile
sample_variance
str_detect
str_replace
fillna
coalesce
as_factor
min_max_scale
standardize
iqr
tidy_ops_demo.cjcl
// Employee salary data
let salaries = [95000.0, 87000.0,
  72000.0, 68000.0, 105000.0, 78000.0];

// filter_mask: like dplyr::filter()
let mask = [true,true,false,false,true,false];
let top = filter_mask(salaries, mask);
print(top);
// → [95000, 87000, 105000]

// cumsum: running revenue totals
let monthly = [1200.0, 1500.0,
  1100.0, 1800.0, 1300.0, 1600.0];
print(cumsum(monthly));
// → [1200, 2700, 3800, 5600, 6900, 8500]

// cumprod: compound growth rates
let growth = [1.05, 1.03, 0.98, 1.07, 1.02];
print(cumprod(growth));
// → [1.05, 1.0815, 1.0599, ...]
// rank: ordinal salary ranking
print(rank(salaries));
// → [5, 4, 2, 1, 6, 3]

// lag / lead: window functions
let vals = [10, 20, 30, 40, 50];
print(lag(vals, 1));
// → [NaN, 10, 20, 30, 40]
print(lead(vals, 1));
// → [20, 30, 40, 50, NaN]

// Statistical aggregates
let data = [3.0,1.0,4.0,1.0,5.0,9.0,2.0,6.0];
print(sort(data));
// → [1, 1, 2, 3, 4, 5, 6, 9]
print(median(data));
// → 3.5
print(mean(data));
// → 3.875

// Stringr: text processing
print(str_replace("hello","lo","CJC"));
// → helCJC
▶ Verified Output — cjcl run tidy_ops_demo.cjcl
filter_mask:  [95000, 87000, 105000]
cumsum:       [1200, 2700, 3800, 5600, 6900, 8500]
cumprod:      [1.05, 1.0815, 1.0599, 1.1341, 1.1567]
rank:         [5, 4, 2, 1, 6, 3]
lag(1):       [NaN, 10, 20, 30, 40]
lead(1):      [20, 30, 40, 50, NaN]
sort:         [1, 1, 2, 3, 4, 5, 6, 9]
median:       3.5    mean: 3.875
80+ DataFrame Operations
7 Aggregation Builtins
Kahan Compensated Sums
BTreeMap Deterministic Order
0 External Dependencies