class CADataFramePivot
Public Class Methods
new(dataframe, name1, name2)
click to toggle source
# File lib/carray-dataframe/pivot.rb, line 14 def initialize (dataframe, name1, name2) @dataframe = dataframe case name1 when Hash name1, list = name1.first @column1 = @dataframe.col(name1) @keys1 = list.to_ca else @column1 = @dataframe.col(name1) @keys1 = @column1.uniq.sort end case name2 when Hash name2, list = name2.first @column2 = @dataframe.col(name2) @keys2 = list else @column2 = @dataframe.col(name2) @keys2 = @column2.uniq.sort end @addrs = {} @keys1.each do |k1| @keys2.each do |k2| @addrs[[k1,k2]] = (@column1.eq(k1) & @column2.eq(k2)).where end end end
Public Instance Methods
table(&block)
click to toggle source
# File lib/carray-dataframe/pivot.rb, line 42 def table (&block) columns = {} @keys2.each do |k2| columns[k2] = CArray.object(@keys1.size) { UNDEF } end @keys1.each_with_index do |k1, i| @keys2.each do |k2| columns[k2][i] = block.call(@dataframe[@addrs[[k1,k2]]]) end end return CADataFrame.new(columns, index: @keys1) end