Class: Daru::DataFrame

Inherits:
Object show all
Defined in:
lib/statsample/daru.rb

Instance Method Summary collapse

Instance Method Details

#crosstab(v1, v2, opts = {}) ⇒ Object



48
49
50
# File 'lib/statsample/daru.rb', line 48

def crosstab(v1,v2,opts={})
  Statsample::Crosstab.new(self[v1], self[v2],opts)
end

#to_multiset_by_split(*vecs) ⇒ Object

Functions for converting to Statsample::Multiset



53
54
55
56
57
58
59
60
61
# File 'lib/statsample/daru.rb', line 53

def to_multiset_by_split(*vecs)
  require 'statsample/multiset'

  if vecs.size == 1
    to_multiset_by_split_one_field(vecs[0])
  else
    to_multiset_by_split_multiple_fields(*vecs)
  end
end

#to_multiset_by_split_multiple_fields(*fields) ⇒ Object



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/statsample/daru.rb', line 81

def to_multiset_by_split_multiple_fields(*fields)
  fields.map!(&:to_sym)
  factors_total=nil
  fields.each do |f|
    if factors_total.nil?
      factors_total = self[f].factors.collect { |c| [c] }
    else
      suma = []
      factors = self[f].factors
      factors_total.each do |f1| 
        factors.each do |f2| 
          suma.push(f1+[f2])
        end
      end
      factors_total = suma
    end
  end
  ms = Statsample::Multiset.new_empty_vectors(vectors.to_a, factors_total)

  p1 = eval "Proc.new {|c| ms[["+fields.collect{|f| "c['#{f}'.to_sym]"}.join(",")+"]].add_row(c) }"
  each_row { |r| p1.call(r) }

  ms.datasets.each do |k,ds|
    ds.rename(
      fields.size.times.map do |i|
        f  = fields[i]
        sk = k[i]
        self[f].index_of(sk)
      end.join("-")
    )
  end
  ms
end

#to_multiset_by_split_one_field(field) ⇒ Object

Creates a Statsample::Multiset, using one field

Raises:

  • (ArgumentError)


64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/statsample/daru.rb', line 64

def to_multiset_by_split_one_field(field)
  raise ArgumentError,"Should use a correct field name" if 
    !@vectors.include? field

  factors = self[field].factors
  ms      = Statsample::Multiset.new_empty_vectors(@vectors.to_a, factors)
  each_row do |row|
    ms[row[field]].add_row(row)
  end
  #puts "Ingreso a los dataset"
  ms.datasets.each do |k,ds|
    ds.rename self[field].index_of(k)
  end

  ms
end