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