class CADataFrameGroupMulti
Public Class Methods
new(dataframe, *names)
click to toggle source
# File lib/carray-dataframe/group.rb, line 110 def initialize (dataframe, *names) @rank = names.size @dataframe = dataframe @names = [] @column = [] @keys = [] names.each_with_index do |name, i| case name when Hash name, list = name.first @column[i] = @dataframe.col(name) @keys[i] = list.to_ca else @column[i] = @dataframe.col(name) @keys[i] = @column[i].to_ca.uniq.sort end @names[i] = name end @addrs = {} each_with_keys do |list| flag = @column[0].eq(list[0]) (1...@rank).each do |i| flag &= @column[i].eq(list[i]) end @addrs[list] = flag.where end end
Public Instance Methods
[](group_value)
click to toggle source
# File lib/carray-dataframe/group.rb, line 186 def [] (group_value) if map = @addrs[group_value] return @dataframe[map] else return @dataframe.vacant_copy end end
calculate(label) { |name, clmn[addrs| ... }
click to toggle source
# File lib/carray-dataframe/group.rb, line 165 def calculate (label, &block) new_columns = {@name=>@keys} @dataframe.each_column do |name, clmn| if name == @name next end new_columns[name] = CArray.object(@keys.size) { UNDEF } @keys.each_with_index do |k, i| begin if block new_columns[name][i] = yield(name, clmn[@addrs[k]]) else new_columns[name][i] = clmn[@addrs[k]].send(label.intern) end rescue end end end return CADataFrame.new(new_columns) end
each() { |key, dataframe[addrs| ... }
click to toggle source
# File lib/carray-dataframe/group.rb, line 194 def each each_with_keys do |key| yield key, @dataframe[@addrs[key]] end end
each_with_keys(&block)
click to toggle source
# File lib/carray-dataframe/group.rb, line 138 def each_with_keys (&block) @keys[0].to_a.product(*@keys[1..-1].map(&:to_a)).each(&block) end
table(&block)
click to toggle source
# File lib/carray-dataframe/group.rb, line 142 def table (&block) hashpool = [] each_with_keys do |list| hashpool << @dataframe[@addrs[list]].execute(&block) end columns = {} @names.each do |name| columns[name] = [] end each_with_keys.with_index do |list,j| @names.each_with_index do |name,i| columns[name][j] = list[i] end end hashpool.each_with_index do |hash, i| hash.each do |key, value| columns[key] ||= [] columns[key][i] = value end end return CADataFrame.new(columns) end