lib/rbbt/tsv/manipulate.rb in rbbt-util-5.21.87 vs lib/rbbt/tsv/manipulate.rb in rbbt-util-5.21.89

- old
+ new

@@ -690,13 +690,11 @@ end self end - - def transpose(key_field="Unkown ID") - raise "Transposing only works for TSVs of type :list" unless type == :list + def transpose_list(key_field="Unkown ID") new_fields = keys.dup new = self.annotate({}) TSV.setup(new, :key_field => key_field, :fields => new_fields, :type => type, :filename => filename, :identifiers => identifiers) require 'matrix' @@ -706,8 +704,26 @@ fields.zip(new_rows) do |key,row| new[key] = row end new + end + + def transpose_double(key_field = "Unkown ID") + sep = "-!SEP--#{rand 10000}!-" + tmp = self.to_list{|v| v * sep} + new = tmp.transpose_list(key_field) + new.to_double{|v| v.split(sep)} + end + + def transpose(key_field = "Unkown ID") + case type + when :list + transpose_list key_field + when :double + transpose_double key_field + else + raise "Transposing only works for TSVs of type :list or :double" + end end end