Module: CrossTable
- Defined in:
- lib/cross_table.rb,
lib/cross_table/version.rb,
lib/cross_table/grouping.rb
Overview
cross tabulation (pivot table) utility
Defined Under Namespace
Modules: Grouping
Constant Summary collapse
- VERSION =
'0.1.1'
Class Method Summary collapse
- .avgs_from(recs:, field:, group_rules:, y_keys:, x_keys:, ret_type: nil) ⇒ Object
- .counts_from(recs:, group_rules:, y_keys:, x_keys:, ret_type: nil) ⇒ Object
- .from(recs:, group_rules:, y_keys:, x_keys:, ret_type: nil, &aggr_proc) ⇒ Object
- .of(grouped_hash, y_keys:, x_keys:, ret_type: nil) ⇒ Object
- .sums_from(recs:, field:, group_rules:, y_keys:, x_keys:, ret_type: nil) ⇒ Object
Class Method Details
.avgs_from(recs:, field:, group_rules:, y_keys:, x_keys:, ret_type: nil) ⇒ Object
28 29 30 31 32 |
# File 'lib/cross_table.rb', line 28 def avgs_from(recs:, field:, group_rules:, y_keys:, x_keys:, ret_type: nil) of(Grouping.avgs(recs, field, group_rules), y_keys: y_keys, x_keys: x_keys, ret_type: ret_type) end |
.counts_from(recs:, group_rules:, y_keys:, x_keys:, ret_type: nil) ⇒ Object
16 17 18 19 20 |
# File 'lib/cross_table.rb', line 16 def counts_from(recs:, group_rules:, y_keys:, x_keys:, ret_type: nil) of(Grouping.counts(recs, group_rules), y_keys: y_keys, x_keys: x_keys, ret_type: ret_type) end |
.from(recs:, group_rules:, y_keys:, x_keys:, ret_type: nil, &aggr_proc) ⇒ Object
10 11 12 13 14 |
# File 'lib/cross_table.rb', line 10 def from(recs:, group_rules:, y_keys:, x_keys:, ret_type: nil, &aggr_proc) of(Grouping.group(recs, group_rules, &aggr_proc), y_keys: y_keys, x_keys: x_keys, ret_type: ret_type) end |
.of(grouped_hash, y_keys:, x_keys:, ret_type: nil) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/cross_table.rb', line 34 def of(grouped_hash, y_keys:, x_keys:, ret_type: nil) vals = y_keys.map do |y_dig_keys| x_keys.map do |x_dig_keys| grouped_hash.dig(*y_dig_keys).dig(*x_dig_keys) end end case ret_type when :data_only return vals when :xy_titles return ([nil] + y_keys).zip([x_keys] + vals).map do |row_title, value_row| [row_title] + value_row end end y_keys.map.zip( vals.map do |row| x_keys.zip(row).to_h end ).to_h end |
.sums_from(recs:, field:, group_rules:, y_keys:, x_keys:, ret_type: nil) ⇒ Object
22 23 24 25 26 |
# File 'lib/cross_table.rb', line 22 def sums_from(recs:, field:, group_rules:, y_keys:, x_keys:, ret_type: nil) of(Grouping.sums(recs, field, group_rules), y_keys: y_keys, x_keys: x_keys, ret_type: ret_type) end |