daru 0.0.3.1 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,579 +1,635 @@
1
1
  require 'spec_helper.rb'
2
2
 
3
3
  describe Daru::DataFrame do
4
- before :each do
5
- @data_frame = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
6
- c: [11,22,33,44,55]},
7
- vectors: [:a, :b, :c],
8
- index: [:one, :two, :three, :four, :five])
9
- end
10
-
11
- context "#initialize" do
12
- it "initializes an empty DataFrame" do
13
- df = Daru::DataFrame.new({}, vectors: [:a, :b])
14
-
15
- expect(df.vectors).to eq(Daru::Index.new [:a, :b])
16
- expect(df.a.class).to eq(Daru::Vector)
17
- expect(df.a) .to eq([].dv(:a))
18
- end
19
-
20
- it "initializes from a Hash" do
21
- df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5]}, vectors: [:a, :b],
22
- index: [:one, :two, :three, :four, :five])
23
-
24
- expect(df.index) .to eq(Daru::Index.new [:one, :two, :three, :four, :five])
25
- expect(df.vectors).to eq(Daru::Index.new [:a, :b])
26
- expect(df.a.class).to eq(Daru::Vector)
27
- expect(df.a) .to eq([1,2,3,4,5].dv(:a, df.index))
28
- end
29
-
30
- it "initializes from a Hash of Vectors", :focus => true do
31
- df = Daru::DataFrame.new({b: [11,12,13,14,15].dv(:b, [:one, :two, :three, :four, :five]),
32
- a: [1,2,3,4,5].dv(:a, [:one, :two, :three, :four, :five])}, vectors: [:a, :b],
33
- index: [:one, :two, :three, :four, :five])
34
-
35
- expect(df.index) .to eq(Daru::Index.new [:one, :two, :three, :four, :five])
36
- expect(df.vectors).to eq(Daru::Index.new [:a, :b])
37
- expect(df.a.class).to eq(Daru::Vector)
38
- expect(df.a) .to eq([1,2,3,4,5].dv(:a, [:one, :two, :three, :four, :five]))
39
- end
40
-
41
- it "initializes from an Array of Hashes" do
42
- df = Daru::DataFrame.new([{a: 1, b: 11}, {a: 2, b: 12}, {a: 3, b: 13},
43
- {a: 4, b: 14}, {a: 5, b: 15}], vectors: [:b, :a], index: [:one, :two, :three, :four, :five])
44
-
45
- expect(df.index) .to eq(Daru::Index.new [:one, :two, :three, :four, :five])
46
- expect(df.vectors).to eq(Daru::Index.new [:b, :a])
47
- expect(df.a.class).to eq(Daru::Vector)
48
- expect(df.a) .to eq([1,2,3,4,5].dv(:a,[:one, :two, :three, :four, :five]))
49
- end
50
-
51
- it "accepts Index objects for row/col" do
52
- rows = Daru::Index.new [:one, :two, :three, :four, :five]
53
- cols = Daru::Index.new [:a, :b]
54
-
55
- df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5]}, vectors: cols,
56
- index: rows)
57
-
58
- expect(df.a) .to eq(Daru::Vector.new([1,2,3,4,5], vectors: [:a], index: rows))
59
- expect(df.b) .to eq(Daru::Vector.new([11,12,13,14,15], name: :b, index: rows))
60
- expect(df.index) .to eq(Daru::Index.new [:one, :two, :three, :four, :five])
61
- expect(df.vectors).to eq(Daru::Index.new [:a, :b])
62
- end
63
-
64
- it "initializes without specifying row/col index" do
65
- df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5]})
66
-
67
- expect(df.index) .to eq(Daru::Index.new [0,1,2,3,4])
68
- expect(df.vectors).to eq(Daru::Index.new [:a, :b])
69
- end
70
-
71
- it "aligns indexes properly" do
72
- df = Daru::DataFrame.new({
73
- b: [11,12,13,14,15].dv(:b, [:two, :one, :four, :five, :three]),
74
- a: [1,2,3,4,5].dv(:a, [:two,:one,:three, :four, :five])
75
- },
76
- vectors: [:a, :b]
77
- )
78
-
79
- expect(df).to eq(Daru::DataFrame.new({
80
- b: [14,13,12,15,11].dv(:b, [:five, :four, :one, :three, :two]),
81
- a: [5,4,2,3,1].dv(:a, [:five, :four, :one, :three, :two])
82
- }, vectors: [:a, :b])
83
- )
84
- end
85
-
86
- it "adds nil values for missing indexes and aligns by index" do
87
- df = Daru::DataFrame.new({
88
- b: [11,12,13,14,15].dv(:b, [:two, :one, :four, :five, :three]),
89
- a: [1,2,3] .dv(:a, [:two,:one,:three])
90
- },
91
- vectors: [:a, :b]
92
- )
93
-
94
- expect(df).to eq(Daru::DataFrame.new({
95
- b: [14,13,12,15,11].dv(:b, [:five, :four, :one, :three, :two]),
96
- a: [nil,nil,2,3,1].dv(:a, [:five, :four, :one, :three, :two])
97
- },
98
- vectors: [:a, :b])
99
- )
100
- end
101
-
102
- it "adds nils in first vector when other vectors have many extra indexes" do
103
- df = Daru::DataFrame.new({
104
- b: [11] .dv(nil, [:one]),
105
- a: [1,2,3] .dv(nil, [:one, :two, :three]),
106
- c: [11,22,33,44,55] .dv(nil, [:one, :two, :three, :four, :five]),
107
- d: [49,69,89,99,108,44].dv(nil, [:one, :two, :three, :four, :five, :six])
108
- }, vectors: [:a, :b, :c, :d], index: [:one, :two, :three, :four, :five, :six])
109
-
110
- expect(df).to eq(Daru::DataFrame.new({
111
- b: [11,nil,nil,nil,nil,nil].dv(nil, [:one, :two, :three, :four, :five, :six]),
112
- a: [1,2,3,nil,nil,nil] .dv(nil, [:one, :two, :three, :four, :five, :six]),
113
- c: [11,22,33,44,55,nil] .dv(nil, [:one, :two, :three, :four, :five, :six]),
114
- d: [49,69,89,99,108,44] .dv(nil, [:one, :two, :three, :four, :five, :six])
115
- }, vectors: [:a, :b, :c, :d], index: [:one, :two, :three, :four, :five, :six])
116
- )
117
- end
118
-
119
- it "correctly matches the supplied DataFrame index with the individual vector indexes" do
120
- df = Daru::DataFrame.new({
121
- b: [11,12,13] .dv(nil, [:one, :bleh, :blah]),
122
- a: [1,2,3,4,5].dv(nil, [:one, :two, :booh, :baah, :three]),
123
- c: [11,22,33,44,55].dv(nil, [0,1,3,:three, :two])
124
- }, vectors: [:a, :b, :c], index: [:one, :two, :three])
125
-
126
- expect(df).to eq(Daru::DataFrame.new({
127
- b: [11,nil,nil].dv(nil, [:one, :two, :three]),
128
- a: [1,2,5] .dv(nil, [:one, :two, :three]),
129
- c: [nil,55,44] .dv(nil, [:one, :two, :three]),
130
- },
131
- vectors: [:a, :b, :c], index: [:one, :two, :three]
132
- )
133
- )
134
- end
135
-
136
- it "completes incomplete vectors" do
137
- df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
138
- c: [11,22,33,44,55]}, vectors: [:a, :c])
139
-
140
- expect(df.vectors).to eq([:a,:c,:b].to_index)
141
- end
4
+ [Array].each do |dtype|
5
+ describe dtype do
6
+ before :each do
7
+ @data_frame = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
8
+ c: [11,22,33,44,55]},
9
+ order: [:a, :b, :c],
10
+ index: [:one, :two, :three, :four, :five], dtype: dtype)
11
+ end
142
12
 
143
- it "raises error for incomplete DataFrame index" do
144
- expect {
145
- df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
146
- c: [11,22,33,44,55]}, vectors: [:a, :b, :c], index: [:one, :two, :three])
147
- }.to raise_error
148
- end
13
+ context ".rows" do
14
+ before do
15
+ @rows = [
16
+ [1,2,3,4,5],
17
+ [1,2,3,4,5],
18
+ [1,2,3,4,5],
19
+ [1,2,3,4,5]
20
+ ]
21
+ end
149
22
 
150
- it "raises error for unequal sized vectors/arrays" do
151
- expect {
152
- df = Daru::DataFrame.new({b: [11,12,13], a: [1,2,3,4,5],
153
- c: [11,22,33,44,55]}, vectors: [:a, :b, :c], index: [:one, :two, :three])
154
- }.to raise_error
155
- end
156
- end
23
+ it "creates a DataFrame from Array rows" do
24
+ df = Daru::DataFrame.rows @rows, order: [:a,:b,:c,:d,:e]
157
25
 
158
- context "#[:vector]" do
159
- before :each do
160
- @df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
161
- c: [11,22,33,44,55]}, vectors: [:a, :b, :c], index: [:one, :two, :three, :four, :five])
162
- end
26
+ expect(df.index) .to eq(Daru::Index.new [0,1,2,3])
27
+ expect(df.vectors) .to eq(Daru::Index.new [:a,:b,:c,:d,:e])
28
+ expect(df.vector[:a]) .to eq(Daru::Vector.new [1,1,1,1])
29
+ end
163
30
 
164
- it "returns a Vector" do
165
- expect(@df[:a, :vector]).to eq([1,2,3,4,5].dv(:a, [:one, :two, :three, :four, :five]))
166
- end
31
+ it "creates a DataFrame from Vector rows" do
32
+ rows = @rows.map { |r| Daru::Vector.new r, index: [:a,:b,:c,:d,:e] }
167
33
 
168
- it "returns a DataFrame" do
169
- temp = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5]},
170
- vectors: [:a, :b], index: [:one, :two, :three, :four, :five])
34
+ df = Daru::DataFrame.rows rows, order: [:a,:b,:c,:d,:e]
171
35
 
172
- expect(@df[:a, :b, :vector]).to eq(temp)
173
- end
36
+ expect(df.index) .to eq(Daru::Index.new [0,1,2,3])
37
+ expect(df.vectors) .to eq(Daru::Index.new [:a,:b,:c,:d,:e])
38
+ expect(df.vector[:a]) .to eq(Daru::Vector.new [1,1,1,1])
39
+ end
40
+ end
174
41
 
175
- it "accesses vector with Integer index" do
176
- expect(@df[0, :vector]).to eq([1,2,3,4,5].dv(:a, [:one, :two, :three, :four, :five]))
177
- end
178
- end
42
+ context "#initialize" do
43
+ it "initializes an empty DataFrame" do
44
+ df = Daru::DataFrame.new({}, order: [:a, :b], dtype: dtype)
45
+
46
+ expect(df.vectors).to eq(Daru::Index.new [:a, :b])
47
+ expect(df.a.class).to eq(Daru::Vector)
48
+ expect(df.a) .to eq([].dv(:a))
49
+ end
50
+
51
+ it "initializes from a Hash" do
52
+ df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5]}, order: [:a, :b],
53
+ index: [:one, :two, :three, :four, :five], dtype: dtype)
54
+
55
+ expect(df.index) .to eq(Daru::Index.new [:one, :two, :three, :four, :five])
56
+ expect(df.vectors).to eq(Daru::Index.new [:a, :b])
57
+ expect(df.a.class).to eq(Daru::Vector)
58
+ expect(df.a) .to eq([1,2,3,4,5].dv(:a, df.index))
59
+ end
60
+
61
+ it "initializes from a Hash of Vectors", :focus => true do
62
+ df = Daru::DataFrame.new({b: [11,12,13,14,15].dv(:b, [:one, :two, :three, :four, :five]),
63
+ a: [1,2,3,4,5].dv(:a, [:one, :two, :three, :four, :five])}, order: [:a, :b],
64
+ index: [:one, :two, :three, :four, :five], dtype: dtype)
65
+
66
+ expect(df.index) .to eq(Daru::Index.new [:one, :two, :three, :four, :five])
67
+ expect(df.vectors).to eq(Daru::Index.new [:a, :b])
68
+ expect(df.a.class).to eq(Daru::Vector)
69
+ expect(df.a) .to eq([1,2,3,4,5].dv(:a, [:one, :two, :three, :four, :five]))
70
+ end
71
+
72
+ it "initializes from an Array of Hashes" do
73
+ df = Daru::DataFrame.new([{a: 1, b: 11}, {a: 2, b: 12}, {a: 3, b: 13},
74
+ {a: 4, b: 14}, {a: 5, b: 15}], order: [:b, :a],
75
+ index: [:one, :two, :three, :four, :five], dtype: dtype)
76
+
77
+ expect(df.index) .to eq(Daru::Index.new [:one, :two, :three, :four, :five])
78
+ expect(df.vectors).to eq(Daru::Index.new [:b, :a])
79
+ expect(df.a.class).to eq(Daru::Vector)
80
+ expect(df.a) .to eq([1,2,3,4,5].dv(:a,[:one, :two, :three, :four, :five]))
81
+ end
82
+
83
+ it "accepts Index objects for row/col" do
84
+ rows = Daru::Index.new [:one, :two, :three, :four, :five]
85
+ cols = Daru::Index.new [:a, :b]
86
+
87
+ df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5]}, order: cols,
88
+ index: rows, dtype: dtype)
89
+
90
+ expect(df.a) .to eq(Daru::Vector.new([1,2,3,4,5], order: [:a], index: rows, dtype: dtype))
91
+ expect(df.b) .to eq(Daru::Vector.new([11,12,13,14,15], name: :b, index: rows, dtype: dtype))
92
+ expect(df.index) .to eq(Daru::Index.new [:one, :two, :three, :four, :five])
93
+ expect(df.vectors).to eq(Daru::Index.new [:a, :b])
94
+ end
95
+
96
+ it "initializes without specifying row/col index" do
97
+ df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5]}, dtype: dtype)
98
+
99
+ expect(df.index) .to eq(Daru::Index.new [0,1,2,3,4])
100
+ expect(df.vectors).to eq(Daru::Index.new [:a, :b])
101
+ end
102
+
103
+ it "aligns indexes properly" do
104
+ df = Daru::DataFrame.new({
105
+ b: [11,12,13,14,15].dv(:b, [:two, :one, :four, :five, :three]),
106
+ a: [1,2,3,4,5].dv(:a, [:two,:one,:three, :four, :five])
107
+ },
108
+ order: [:a, :b], dtype: dtype
109
+ )
110
+
111
+ expect(df).to eq(Daru::DataFrame.new({
112
+ b: [14,13,12,15,11].dv(:b, [:five, :four, :one, :three, :two]),
113
+ a: [5,4,2,3,1].dv(:a, [:five, :four, :one, :three, :two])
114
+ }, order: [:a, :b], dtype: dtype)
115
+ )
116
+ end
117
+
118
+ it "adds nil values for missing indexes and aligns by index" do
119
+ df = Daru::DataFrame.new({
120
+ b: [11,12,13,14,15].dv(:b, [:two, :one, :four, :five, :three]),
121
+ a: [1,2,3] .dv(:a, [:two,:one,:three])
122
+ },
123
+ order: [:a, :b], dtype: dtype
124
+ )
125
+
126
+ expect(df).to eq(Daru::DataFrame.new({
127
+ b: [14,13,12,15,11].dv(:b, [:five, :four, :one, :three, :two]),
128
+ a: [nil,nil,2,3,1].dv(:a, [:five, :four, :one, :three, :two])
129
+ },
130
+ order: [:a, :b], dtype: dtype)
131
+ )
132
+ end
133
+
134
+ it "adds nils in first vector when other vectors have many extra indexes" do
135
+ df = Daru::DataFrame.new({
136
+ b: [11] .dv(nil, [:one]),
137
+ a: [1,2,3] .dv(nil, [:one, :two, :three]),
138
+ c: [11,22,33,44,55] .dv(nil, [:one, :two, :three, :four, :five]),
139
+ d: [49,69,89,99,108,44].dv(nil, [:one, :two, :three, :four, :five, :six])
140
+ }, order: [:a, :b, :c, :d],
141
+ index: [:one, :two, :three, :four, :five, :six], dtype: dtype)
142
+
143
+ expect(df).to eq(Daru::DataFrame.new({
144
+ b: [11,nil,nil,nil,nil,nil].dv(nil, [:one, :two, :three, :four, :five, :six]),
145
+ a: [1,2,3,nil,nil,nil] .dv(nil, [:one, :two, :three, :four, :five, :six]),
146
+ c: [11,22,33,44,55,nil] .dv(nil, [:one, :two, :three, :four, :five, :six]),
147
+ d: [49,69,89,99,108,44] .dv(nil, [:one, :two, :three, :four, :five, :six])
148
+ }, order: [:a, :b, :c, :d],
149
+ index: [:one, :two, :three, :four, :five, :six], dtype: dtype)
150
+ )
151
+ end
152
+
153
+ it "correctly matches the supplied DataFrame index with the individual vector indexes" do
154
+ df = Daru::DataFrame.new({
155
+ b: [11,12,13] .dv(nil, [:one, :bleh, :blah]),
156
+ a: [1,2,3,4,5].dv(nil, [:one, :two, :booh, :baah, :three]),
157
+ c: [11,22,33,44,55].dv(nil, [0,1,3,:three, :two])
158
+ }, order: [:a, :b, :c], index: [:one, :two, :three], dtype: dtype)
159
+
160
+ expect(df).to eq(Daru::DataFrame.new({
161
+ b: [11,nil,nil].dv(nil, [:one, :two, :three]),
162
+ a: [1,2,5] .dv(nil, [:one, :two, :three]),
163
+ c: [nil,55,44] .dv(nil, [:one, :two, :three]),
164
+ },
165
+ order: [:a, :b, :c], index: [:one, :two, :three], dtype: dtype
166
+ )
167
+ )
168
+ end
169
+
170
+ it "completes incomplete vectors" do
171
+ df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
172
+ c: [11,22,33,44,55]}, order: [:a, :c], dtype: dtype)
173
+
174
+ expect(df.vectors).to eq([:a,:c,:b].to_index)
175
+ end
176
+
177
+ it "raises error for incomplete DataFrame index" do
178
+ expect {
179
+ df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
180
+ c: [11,22,33,44,55]}, order: [:a, :b, :c],
181
+ index: [:one, :two, :three], dtype: dtype)
182
+ }.to raise_error
183
+ end
184
+
185
+ it "raises error for unequal sized vectors/arrays" do
186
+ expect {
187
+ df = Daru::DataFrame.new({b: [11,12,13], a: [1,2,3,4,5],
188
+ c: [11,22,33,44,55]}, order: [:a, :b, :c],
189
+ index: [:one, :two, :three], dtype: dtype)
190
+ }.to raise_error
191
+ end
192
+ end
179
193
 
180
- context "#[:row]" do
181
- before :each do
182
- @df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
183
- c: [11,22,33,44,55]},
184
- vectors: [:a, :b, :c],
185
- index: [:one, :two, :three, :four, :five])
186
- end
194
+ context "#[:vector]" do
195
+ before :each do
196
+ @df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
197
+ c: [11,22,33,44,55]}, order: [:a, :b, :c],
198
+ index: [:one, :two, :three, :four, :five], dtype: dtype)
199
+ end
187
200
 
188
- it "returns a row with the given index" do
189
- expect(@df[:one, :row]).to eq([1,11,11].dv(:one, [:a, :b, :c]))
190
- end
201
+ it "returns a Vector" do
202
+ expect(@df[:a, :vector]).to eq([1,2,3,4,5].dv(:a, [:one, :two, :three, :four, :five]))
203
+ end
191
204
 
192
- it "returns a row with given Integer index" do
193
- expect(@df[0, :row]).to eq([1,11,11].dv(:one, [:a, :b, :c]))
194
- end
205
+ it "returns a DataFrame" do
206
+ temp = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5]},
207
+ order: [:a, :b], index: [:one, :two, :three, :four, :five], dtype: dtype)
195
208
 
196
- it "returns a row with given Integer index for default index-less DataFrame" do
197
- df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
198
- c: [11,22,33,44,55]}, vectors: [:a, :b, :c])
209
+ expect(@df[:a, :b, :vector]).to eq(temp)
210
+ end
199
211
 
200
- expect(df[0, :row]).to eq([1,11,11].dv(nil, [:a, :b, :c]))
201
- end
202
- end
212
+ it "accesses vector with Integer index" do
213
+ expect(@df[0, :vector]).to eq([1,2,3,4,5].dv(:a, [:one, :two, :three, :four, :five]))
214
+ end
215
+ end
203
216
 
204
- context "#[:vector]=" do
205
- before :each do
206
- @df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
207
- c: [11,22,33,44,55]}, vectors: [:a, :b, :c], index: [:one, :two, :three, :four, :five])
208
- end
217
+ context "#[:row]" do
218
+ before :each do
219
+ @df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
220
+ c: [11,22,33,44,55]},
221
+ order: [:a, :b, :c],
222
+ index: [:one, :two, :three, :four, :five], dtype: dtype)
223
+ end
209
224
 
210
- it "appends an Array as a Daru::Vector" do
211
- @df[:d, :vector] = [69,99,108,85,49]
225
+ it "returns a row with the given index" do
226
+ expect(@df[:one, :row]).to eq([1,11,11].dv(:one, [:a, :b, :c]))
227
+ end
212
228
 
213
- expect(@df.d.class).to eq(Daru::Vector)
214
- end
229
+ it "returns a row with given Integer index" do
230
+ expect(@df[0, :row]).to eq([1,11,11].dv(:one, [:a, :b, :c]))
231
+ end
215
232
 
216
- it "replaces an already present vector" do
217
- @df[:a, :vector] = [69,99,108,85,49].dv(nil, [:one, :two, :three, :four, :five])
233
+ it "returns a row with given Integer index for default index-less DataFrame" do
234
+ df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
235
+ c: [11,22,33,44,55]}, order: [:a, :b, :c], dtype: dtype)
218
236
 
219
- expect(@df.a).to eq([69,99,108,85,49].dv(nil, [:one, :two, :three, :four, :five]))
220
- end
237
+ expect(df[0, :row]).to eq([1,11,11].dv(nil, [:a, :b, :c]))
238
+ end
239
+ end
221
240
 
222
- it "appends a new vector to the DataFrame" do
223
- @df[:woo, :vector] = [69,99,108,85,49].dv(nil, [:one, :two, :three, :four, :five])
241
+ context "#[:vector]=" do
242
+ before :each do
243
+ @df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
244
+ c: [11,22,33,44,55]}, order: [:a, :b, :c],
245
+ index: [:one, :two, :three, :four, :five], dtype: dtype)
246
+ end
224
247
 
225
- expect(@df.vectors).to eq([:a, :b, :c, :woo].to_index)
226
- end
248
+ it "appends an Array as a Daru::Vector" do
249
+ @df[:d, :vector] = [69,99,108,85,49]
227
250
 
228
- it "creates an index for the new vector if not specified" do
229
- @df[:woo, :vector] = [69,99,108,85,49]
251
+ expect(@df.d.class).to eq(Daru::Vector)
252
+ end
230
253
 
231
- expect(@df.woo.index).to eq([:one, :two, :three, :four, :five].to_index)
232
- end
254
+ it "replaces an already present vector" do
255
+ @df[:a, :vector] = [69,99,108,85,49].dv(nil, [:one, :two, :three, :four, :five])
233
256
 
234
- it "matches index of vector to be inserted with the DataFrame index" do
235
- @df[:shankar, :vector] = [69,99,108,85,49].dv(:shankar, [:two, :one, :three, :five, :four])
257
+ expect(@df.a).to eq([69,99,108,85,49].dv(nil, [:one, :two, :three, :four, :five]))
258
+ end
236
259
 
237
- expect(@df.shankar).to eq([99,69,108,49,85].dv(:shankar,
238
- [:one, :two, :three, :four, :five]))
239
- end
260
+ it "appends a new vector to the DataFrame" do
261
+ @df[:woo, :vector] = [69,99,108,85,49].dv(nil, [:one, :two, :three, :four, :five])
240
262
 
241
- it "matches index of vector to be inserted, inserting nils where no match found" do
242
- @df.vector[:shankar] = [1,2,3].dv(:shankar, [:one, :james, :hetfield])
263
+ expect(@df.vectors).to eq([:a, :b, :c, :woo].to_index)
264
+ end
243
265
 
244
- expect(@df.shankar).to eq([1,nil,nil,nil,nil].dv(:shankar, [:one, :two, :three, :four, :five]))
245
- end
266
+ it "creates an index for the new vector if not specified" do
267
+ @df[:woo, :vector] = [69,99,108,85,49]
246
268
 
247
- it "raises error for Array assignment of wrong length" do
248
- expect{
249
- @df.vector[:shiva] = [1,2,3]
250
- }.to raise_error
251
- end
269
+ expect(@df.woo.index).to eq([:one, :two, :three, :four, :five].to_index)
270
+ end
252
271
 
253
- it "appends multiple vectors at a time" do
254
- pending "Implement after initialize with array of arrays is done with."
272
+ it "matches index of vector to be inserted with the DataFrame index" do
273
+ @df[:shankar, :vector] = [69,99,108,85,49].dv(:shankar, [:two, :one, :three, :five, :four])
255
274
 
256
- # Rudimentary example. Yet to think this out.
275
+ expect(@df.shankar).to eq([99,69,108,49,85].dv(:shankar,
276
+ [:one, :two, :three, :four, :five]))
277
+ end
257
278
 
258
- @df[:woo, :boo, :vector] = [[69,99,108,85,49].dv(nil, [:one, :two, :three, :four, :five]),
259
- [69,99,108,85,49].dv(nil, [:one, :two, :three, :four, :five])]
260
- end
261
- end
279
+ it "matches index of vector to be inserted, inserting nils where no match found" do
280
+ @df.vector[:shankar] = [1,2,3].dv(:shankar, [:one, :james, :hetfield])
262
281
 
263
- context "#[:row]=" do
264
- before :each do
265
- @df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
266
- c: [11,22,33,44,55]}, vectors: [:a, :b, :c], index: [:one, :two, :three, :four, :five])
267
- end
282
+ expect(@df.shankar).to eq([1,nil,nil,nil,nil].dv(:shankar, [:one, :two, :three, :four, :five]))
283
+ end
268
284
 
269
- it "assigns specified row when Array" do
270
- @df.row[:one] = [49, 99, 59]
285
+ it "raises error for Array assignment of wrong length" do
286
+ expect{
287
+ @df.vector[:shiva] = [1,2,3]
288
+ }.to raise_error
289
+ end
271
290
 
272
- expect(@df[:one, :row]) .to eq([49, 99, 59].dv(:one, [:a, :b, :c]))
273
- expect(@df[:one, :row].index).to eq([:a, :b, :c].to_index)
274
- expect(@df[:one, :row].name) .to eq(:one)
275
- end
291
+ it "appends multiple vectors at a time" do
292
+ pending "Implement after initialize with array of arrays is done with."
276
293
 
277
- it "assigns specified row when DV" do
278
- @df[:one, :row] = [49, 99, 59].dv(nil, [:a, :b, :c])
294
+ # Rudimentary example. Yet to think this out.
279
295
 
280
- expect(@df[:one, :row]).to eq([49, 99, 59].dv(:one, [:a, :b, :c]))
281
- end
296
+ @df[:woo, :boo, :vector] = [[69,99,108,85,49].dv(nil, [:one, :two, :three, :four, :five]),
297
+ [69,99,108,85,49].dv(nil, [:one, :two, :three, :four, :five])]
298
+ end
299
+ end
282
300
 
283
- it "creates a new row from an Array" do
284
- @df.row[:patekar] = [9,2,11]
301
+ context "#[:row]=" do
302
+ before :each do
303
+ @df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
304
+ c: [11,22,33,44,55]}, order: [:a, :b, :c],
305
+ index: [:one, :two, :three, :four, :five], dtype: dtype)
306
+ end
285
307
 
286
- expect(@df[:patekar, :row]).to eq([9,2,11].dv(:patekar, [:a, :b, :c]))
287
- end
308
+ it "assigns specified row when Array" do
309
+ @df.row[:one] = [49, 99, 59]
288
310
 
289
- it "creates a new row from a DV" do
290
- @df.row[:patekar] = [9,2,11].dv(nil, [:a, :b, :c])
311
+ expect(@df[:one, :row]) .to eq([49, 99, 59].dv(:one, [:a, :b, :c], dtype))
312
+ expect(@df[:one, :row].index).to eq([:a, :b, :c].to_index)
313
+ expect(@df[:one, :row].name) .to eq(:one)
314
+ end
291
315
 
292
- expect(@df[:patekar, :row]).to eq([9,2,11].dv(:patekar, [:a, :b, :c]))
293
- end
316
+ it "assigns specified row when DV" do
317
+ @df[:one, :row] = [49, 99, 59].dv(nil, [:a, :b, :c], dtype)
294
318
 
295
- it "creates a new row from numeric row index and named DV" do
296
- @df.row[2] = [9,2,11].dv(nil, [:a, :b, :c])
319
+ expect(@df[:one, :row]).to eq([49, 99, 59].dv(:one, [:a, :b, :c], dtype))
320
+ end
297
321
 
298
- expect(@df[2, :row]).to eq([9,2,11].dv(nil, [:a, :b, :c]))
299
- end
322
+ it "creates a new row from an Array" do
323
+ @df.row[:patekar] = [9,2,11]
300
324
 
301
- it "correctly aligns assigned DV by index" do
302
- @df.row[:two] = [9,2,11].dv(nil, [:b, :a, :c])
303
-
304
- expect(@df.row[:two]).to eq([2,9,11].dv(:two, [:a, :b, :c]))
305
- end
325
+ expect(@df[:patekar, :row]).to eq([9,2,11].dv(:patekar, [:a, :b, :c]))
326
+ end
306
327
 
307
- it "inserts nils for indexes that dont exist in the DataFrame" do
308
- @df.row[:two] = [49, 99, 59].dv(nil, [:oo, :aah, :gaah])
328
+ it "creates a new row from a DV" do
329
+ @df.row[:patekar] = [9,2,11].dv(nil, [:a, :b, :c])
309
330
 
310
- expect(@df.row[:two]).to eq([nil,nil,nil].dv(nil, [:a, :b, :c]))
311
- end
331
+ expect(@df[:patekar, :row]).to eq([9,2,11].dv(:patekar, [:a, :b, :c]))
332
+ end
312
333
 
313
- it "correctly inserts row of a different length by matching indexes" do
314
- @df.row[:four] = [5,4,3,2,1,3].dv(nil, [:you, :have, :a, :big, :appetite, :spock])
334
+ it "creates a new row from numeric row index and named DV" do
335
+ @df.row[2] = [9,2,11].dv(nil, [:a, :b, :c])
315
336
 
316
- expect(@df.row[:four]).to eq([3,nil,nil].dv(:four, [:a, :b, :c]))
317
- end
337
+ expect(@df[2, :row]).to eq([9,2,11].dv(nil, [:a, :b, :c]))
338
+ end
318
339
 
319
- it "raises error for row insertion by Array of wrong length" do
320
- expect{
321
- @df.row[:one] = [1,2,3,4,5,6,7]
322
- }.to raise_error
323
- end
340
+ it "correctly aligns assigned DV by index" do
341
+ @df.row[:two] = [9,2,11].dv(nil, [:b, :a, :c])
342
+
343
+ expect(@df.row[:two]).to eq([2,9,11].dv(:two, [:a, :b, :c]))
344
+ end
324
345
 
325
- it "returns a DataFrame when mutiple indexes specified" do
326
- pending "Next release"
346
+ it "inserts nils for indexes that dont exist in the DataFrame" do
347
+ @df.row[:two] = [49, 99, 59].dv(nil, [:oo, :aah, :gaah])
327
348
 
328
- raise
329
- end
330
- end
349
+ expect(@df.row[:two]).to eq([nil,nil,nil].dv(nil, [:a, :b, :c]))
350
+ end
331
351
 
332
- context "#row" do
333
- before :each do
334
- @df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
335
- c: [11,22,33,44,55]}, vectors: [:a, :b, :c], index: [:one, :two, :three, :four, :five])
336
- end
352
+ it "correctly inserts row of a different length by matching indexes" do
353
+ @df.row[:four] = [5,4,3,2,1,3].dv(nil, [:you, :have, :a, :big, :appetite, :spock])
337
354
 
338
- it "creates an index for assignment if not already specified" do
339
- @df.row[:one] = [49, 99, 59]
355
+ expect(@df.row[:four]).to eq([3,nil,nil].dv(:four, [:a, :b, :c]))
356
+ end
340
357
 
341
- expect(@df[:one, :row]) .to eq([49, 99, 59].dv(:one, [:a, :b, :c]))
342
- expect(@df[:one, :row].index).to eq([:a, :b, :c].to_index)
343
- expect(@df[:one, :row].name) .to eq(:one)
344
- end
345
- end
358
+ it "raises error for row insertion by Array of wrong length" do
359
+ expect{
360
+ @df.row[:one] = [1,2,3,4,5,6,7]
361
+ }.to raise_error
362
+ end
363
+ end
346
364
 
347
- context "#vector" do
348
- it "appends an Array as a Daru::Vector" do
349
- @data_frame[:d, :vector] = [69,99,108,85,49]
365
+ context "#row" do
366
+ before :each do
367
+ @df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
368
+ c: [11,22,33,44,55]}, order: [:a, :b, :c],
369
+ index: [:one, :two, :three, :four, :five], dtype: dtype)
370
+ end
371
+
372
+ it "creates an index for assignment if not already specified" do
373
+ @df.row[:one] = [49, 99, 59]
374
+
375
+ expect(@df[:one, :row]) .to eq([49, 99, 59].dv(:one, [:a, :b, :c]))
376
+ expect(@df[:one, :row].index).to eq([:a, :b, :c].to_index)
377
+ expect(@df[:one, :row].name) .to eq(:one)
378
+ end
379
+
380
+ it "returns a DataFrame when specifying numeric Range" do
381
+ expect(@df.row[0..2]).to eq(
382
+ Daru::DataFrame.new({b: [11,12,13], a: [1,2,3],
383
+ c: [11,22,33]}, order: [:a, :b, :c],
384
+ index: [:one, :two, :three], dtype: dtype)
385
+ )
386
+ end
387
+
388
+ it "returns a DataFrame when specifying symbolic Range" do
389
+ expect(@df.row[:one..:three]).to eq(
390
+ Daru::DataFrame.new({b: [11,12,13], a: [1,2,3],
391
+ c: [11,22,33]}, order: [:a, :b, :c],
392
+ index: [:one, :two, :three], dtype: dtype)
393
+ )
394
+ end
395
+ end
350
396
 
351
- expect(@data_frame.d.class).to eq(Daru::Vector)
352
- end
353
- end
397
+ context "#vector" do
398
+ it "appends an Array as a Daru::Vector" do
399
+ @data_frame[:d, :vector] = [69,99,108,85,49]
354
400
 
355
- context "#==" do
356
- it "compares by vectors, index and values of a DataFrame (ignores name)" do
357
- a = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5]},
358
- vectors: [:a, :b], index: [:one, :two, :three, :four, :five])
401
+ expect(@data_frame.d.class).to eq(Daru::Vector)
402
+ end
403
+ end
359
404
 
360
- b = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5]},
361
- vectors: [:a, :b], index: [:one, :two, :three, :four, :five])
405
+ context "#==" do
406
+ it "compares by vectors, index and values of a DataFrame (ignores name)" do
407
+ a = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5]},
408
+ order: [:a, :b], index: [:one, :two, :three, :four, :five], dtype: dtype)
362
409
 
363
- expect(a).to eq(b)
364
- end
365
- end
410
+ b = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5]},
411
+ order: [:a, :b], index: [:one, :two, :three, :four, :five], dtype: dtype)
366
412
 
367
- context "#dup" do
368
- it "dups every data structure inside DataFrame" do
369
- clo = @data_frame.dup
413
+ expect(a).to eq(b)
414
+ end
415
+ end
370
416
 
371
- expect(clo.object_id) .not_to eq(@data_frame.object_id)
372
- expect(clo.vectors.object_id).not_to eq(@data_frame.object_id)
373
- expect(clo.index.object_id) .not_to eq(@data_frame.object_id)
417
+ context "#dup" do
418
+ it "dups every data structure inside DataFrame" do
419
+ clo = @data_frame.dup
374
420
 
375
- @data_frame.each_vector_with_index do |vector, index|
376
- expect(vector.object_id).not_to eq(clo.vector[index].object_id)
377
- end
378
- end
379
- end
421
+ expect(clo.object_id) .not_to eq(@data_frame.object_id)
422
+ expect(clo.vectors.object_id).not_to eq(@data_frame.object_id)
423
+ expect(clo.index.object_id) .not_to eq(@data_frame.object_id)
380
424
 
381
- context "#each_vector" do
382
- it "iterates over all vectors" do
383
- ret = @data_frame.each_vector do |vector|
384
- expect(vector.index).to eq([:one, :two, :three, :four, :five].to_index)
385
- expect(vector.class).to eq(Daru::Vector)
425
+ @data_frame.each_vector_with_index do |vector, index|
426
+ expect(vector.object_id).not_to eq(clo.vector[index].object_id)
427
+ end
428
+ end
386
429
  end
387
430
 
388
- expect(ret).to eq(@data_frame)
389
- end
390
- end
431
+ context "#each_vector" do
432
+ it "iterates over all vectors" do
433
+ ret = @data_frame.each_vector do |vector|
434
+ expect(vector.index).to eq([:one, :two, :three, :four, :five].to_index)
435
+ expect(vector.class).to eq(Daru::Vector)
436
+ end
391
437
 
392
- context "#each_vector_with_index" do
393
- it "iterates over vectors with index" do
394
- idxs = []
395
- ret = @data_frame.each_vector_with_index do |vector, index|
396
- idxs << index
397
- expect(vector.index).to eq([:one, :two, :three, :four, :five].to_index)
398
- expect(vector.class).to eq(Daru::Vector)
438
+ expect(ret).to eq(@data_frame)
439
+ end
399
440
  end
400
441
 
401
- expect(idxs).to eq([:a, :b, :c])
442
+ context "#each_vector_with_index" do
443
+ it "iterates over vectors with index" do
444
+ idxs = []
445
+ ret = @data_frame.each_vector_with_index do |vector, index|
446
+ idxs << index
447
+ expect(vector.index).to eq([:one, :two, :three, :four, :five].to_index)
448
+ expect(vector.class).to eq(Daru::Vector)
449
+ end
402
450
 
403
- expect(ret).to eq(@data_frame)
404
- end
405
- end
451
+ expect(idxs).to eq([:a, :b, :c])
406
452
 
407
- context "#each_row" do
408
- it "iterates over rows" do
409
- ret = @data_frame.each_row do |row|
410
- expect(row.index).to eq([:a, :b, :c].to_index)
411
- expect(row.class).to eq(Daru::Vector)
453
+ expect(ret).to eq(@data_frame)
454
+ end
412
455
  end
413
456
 
414
- expect(ret).to eq(@data_frame)
415
- end
416
- end
457
+ context "#each_row" do
458
+ it "iterates over rows" do
459
+ ret = @data_frame.each_row do |row|
460
+ expect(row.index).to eq([:a, :b, :c].to_index)
461
+ expect(row.class).to eq(Daru::Vector)
462
+ end
417
463
 
418
- context "#each_row_with_index" do
419
- it "iterates over rows with indexes" do
420
- idxs = []
421
- ret = @data_frame.each_row_with_index do |row, idx|
422
- idxs << idx
423
- expect(row.index).to eq([:a, :b, :c].to_index)
424
- expect(row.class).to eq(Daru::Vector)
464
+ expect(ret).to eq(@data_frame)
465
+ end
425
466
  end
426
467
 
427
- expect(idxs).to eq([:one, :two, :three, :four, :five])
428
- expect(ret) .to eq(@data_frame)
429
- end
430
- end
431
-
432
- context "#map_vectors" do
433
- it "iterates over vectors and returns a modified DataFrame" do
434
- ans = Daru::DataFrame.new({b: [21,22,23,24,25], a: [11,12,13,14,15],
435
- c: [21,32,43,54,65]}, vectors: [:a, :b, :c], index: [:one, :two, :three, :four, :five])
436
-
437
- ret = @data_frame.map_vectors do |vector|
438
- vector = vector.map { |e| e += 10}
468
+ context "#each_row_with_index" do
469
+ it "iterates over rows with indexes" do
470
+ idxs = []
471
+ ret = @data_frame.each_row_with_index do |row, idx|
472
+ idxs << idx
473
+ expect(row.index).to eq([:a, :b, :c].to_index)
474
+ expect(row.class).to eq(Daru::Vector)
475
+ end
476
+
477
+ expect(idxs).to eq([:one, :two, :three, :four, :five])
478
+ expect(ret) .to eq(@data_frame)
479
+ end
439
480
  end
440
481
 
441
- expect(ret).to eq(ans)
442
- expect(ret == @data_frame).to eq(false)
443
- end
444
- end
482
+ context "#map_vectors" do
483
+ it "iterates over vectors and returns a modified DataFrame" do
484
+ ans = Daru::DataFrame.new({b: [21,22,23,24,25], a: [11,12,13,14,15],
485
+ c: [21,32,43,54,65]}, order: [:a, :b, :c],
486
+ index: [:one, :two, :three, :four, :five], dtype: dtype)
445
487
 
446
- context "#map_vectors_with_index" do
447
- it "iterates over vectors with index and returns a modified DataFrame" do
448
- ans = Daru::DataFrame.new({b: [21,22,23,24,25], a: [11,12,13,14,15],
449
- c: [21,32,43,54,65]}, vectors: [:a, :b, :c], index: [:one, :two, :three, :four, :five])
488
+ ret = @data_frame.map_vectors do |vector|
489
+ vector = vector.map { |e| e += 10}
490
+ end
450
491
 
451
- idx = []
452
- ret = @data_frame.map_vectors_with_index do |vector, index|
453
- idx << index
454
- vector = vector.map { |e| e += 10}
492
+ expect(ret).to eq(ans)
493
+ expect(ret == @data_frame).to eq(false)
494
+ end
455
495
  end
456
496
 
457
- expect(ret).to eq(ans)
458
- expect(idx).to eq([:a, :b, :c])
459
- end
460
- end
461
-
462
- context "#map_rows" do
463
- it "iterates over rows and returns a modified DataFrame" do
464
- ans = Daru::DataFrame.new({b: [121, 144, 169, 196, 225], a: [1,4,9,16,25],
465
- c: [121, 484, 1089, 1936, 3025]}, vectors: [:a, :b, :c],
466
- index: [:one, :two, :three, :four, :five])
467
-
468
- ret = @data_frame.map_rows do |row|
469
- expect(row.class).to eq(Daru::Vector)
470
- row = row.map { |e| e*e }
497
+ context "#map_vectors_with_index" do
498
+ it "iterates over vectors with index and returns a modified DataFrame" do
499
+ ans = Daru::DataFrame.new({b: [21,22,23,24,25], a: [11,12,13,14,15],
500
+ c: [21,32,43,54,65]}, order: [:a, :b, :c],
501
+ index: [:one, :two, :three, :four, :five], dtype: dtype)
502
+
503
+ idx = []
504
+ ret = @data_frame.map_vectors_with_index do |vector, index|
505
+ idx << index
506
+ vector = vector.map { |e| e += 10}
507
+ end
508
+
509
+ expect(ret).to eq(ans)
510
+ expect(idx).to eq([:a, :b, :c])
511
+ end
471
512
  end
472
513
 
473
- expect(ret).to eq(ans)
474
- end
475
- end
514
+ context "#map_rows" do
515
+ it "iterates over rows and returns a modified DataFrame" do
516
+ ans = Daru::DataFrame.new({b: [121, 144, 169, 196, 225], a: [1,4,9,16,25],
517
+ c: [121, 484, 1089, 1936, 3025]}, order: [:a, :b, :c],
518
+ index: [:one, :two, :three, :four, :five], dtype: dtype)
476
519
 
477
- context "#map_rows_with_index" do
478
- it "iterates over rows with index and returns a modified DataFrame" do
479
- ans = Daru::DataFrame.new({b: [121, 144, 169, 196, 225], a: [1,4,9,16,25],
480
- c: [121, 484, 1089, 1936, 3025]},vectors: [:a, :b, :c], index: [:one, :two, :three, :four, :five])
520
+ ret = @data_frame.map_rows do |row|
521
+ expect(row.class).to eq(Daru::Vector)
522
+ row = row.map { |e| e*e }
523
+ end
481
524
 
482
- idx = []
483
- ret = @data_frame.map_rows_with_index do |row, index|
484
- idx << index
485
- expect(row.class).to eq(Daru::Vector)
486
- row = row.map { |e| e*e }
525
+ expect(ret).to eq(ans)
526
+ end
487
527
  end
488
528
 
489
- expect(ret).to eq(ans)
490
- expect(idx).to eq([:one, :two, :three, :four, :five])
491
- end
492
- end
529
+ context "#map_rows_with_index" do
530
+ it "iterates over rows with index and returns a modified DataFrame" do
531
+ ans = Daru::DataFrame.new({b: [121, 144, 169, 196, 225], a: [1,4,9,16,25],
532
+ c: [121, 484, 1089, 1936, 3025]},order: [:a, :b, :c],
533
+ index: [:one, :two, :three, :four, :five], dtype: dtype)
534
+
535
+ idx = []
536
+ ret = @data_frame.map_rows_with_index do |row, index|
537
+ idx << index
538
+ expect(row.class).to eq(Daru::Vector)
539
+ row = row.map { |e| e*e }
540
+ end
541
+
542
+ expect(ret).to eq(ans)
543
+ expect(idx).to eq([:one, :two, :three, :four, :five])
544
+ end
545
+ end
493
546
 
494
- context "#delete_vector" do
495
- it "deletes the specified vector" do
496
- @data_frame.delete_vector :a
547
+ context "#delete_vector" do
548
+ it "deletes the specified vector" do
549
+ @data_frame.delete_vector :a
497
550
 
498
- expect(@data_frame).to eq(Daru::DataFrame.new({b: [11,12,13,14,15],
499
- c: [11,22,33,44,55]}, vectors: [:b, :c],
500
- index: [:one, :two, :three, :four, :five]))
501
- end
502
- end
551
+ expect(@data_frame).to eq(Daru::DataFrame.new({b: [11,12,13,14,15],
552
+ c: [11,22,33,44,55]}, order: [:b, :c],
553
+ index: [:one, :two, :three, :four, :five], dtype: dtype))
554
+ end
555
+ end
503
556
 
504
- context "#delete_row" do
505
- it "deletes the specified row" do
506
- @data_frame.delete_row :one
557
+ context "#delete_row" do
558
+ it "deletes the specified row" do
559
+ @data_frame.delete_row :one
507
560
 
508
- expect(@data_frame).to eq(Daru::DataFrame.new({b: [12,13,14,15], a: [2,3,4,5],
509
- c: [22,33,44,55]}, vectors: [:a, :b, :c], index: [:two, :three, :four, :five]))
510
- end
511
- end
512
-
513
- context "#keep_row_if", :focus => true do
514
- it "keeps row if block evaluates to true" do
515
- df = Daru::DataFrame.new({b: [10,12,20,23,30], a: [50,30,30,1,5],
516
- c: [10,20,30,40,50]}, vectors: [:a, :b, :c], index: [:one, :two, :three, :four, :five])
561
+ expect(@data_frame).to eq(Daru::DataFrame.new({b: [12,13,14,15], a: [2,3,4,5],
562
+ c: [22,33,44,55]}, order: [:a, :b, :c], index: [:two, :three, :four, :five], dtype: dtype))
563
+ end
564
+ end
517
565
 
518
- df.keep_row_if do |row|
519
- row[:a] % 10 == 0
566
+ context "#keep_row_if", :focus => true do
567
+ it "keeps row if block evaluates to true" do
568
+ df = Daru::DataFrame.new({b: [10,12,20,23,30], a: [50,30,30,1,5],
569
+ c: [10,20,30,40,50]}, order: [:a, :b, :c],
570
+ index: [:one, :two, :three, :four, :five], dtype: dtype)
571
+
572
+ df.keep_row_if do |row|
573
+ row[:a] % 10 == 0
574
+ end
575
+ # TODO: write expectation
576
+ end
520
577
  end
521
- # TODO: write expectation
522
- end
523
- end
524
578
 
525
- context "#keep_vector_if" do
526
- it "keeps vector if block evaluates to true" do
527
- @data_frame.keep_vector_if do |vector|
528
- vector == [1,2,3,4,5].dv(nil, [:one, :two, :three, :four, :five])
579
+ context "#keep_vector_if" do
580
+ it "keeps vector if block evaluates to true" do
581
+ @data_frame.keep_vector_if do |vector|
582
+ vector == [1,2,3,4,5].dv(nil, [:one, :two, :three, :four, :five])
583
+ end
584
+
585
+ expect(@data_frame).to eq(Daru::DataFrame.new({a: [1,2,3,4,5]}, order: [:a],
586
+ index: [:one, :two, :three, :four, :five], dtype: dtype))
587
+ end
529
588
  end
530
589
 
531
- expect(@data_frame).to eq(Daru::DataFrame.new({a: [1,2,3,4,5]}, vectors: [:a],
532
- index: [:one, :two, :three, :four, :five]))
533
- end
534
- end
590
+ context "#filter_rows" do
591
+ it "filters rows" do
592
+ df = Daru::DataFrame.new({a: [1,2,3], b: [2,3,4]})
535
593
 
536
- context "#filter_rows" do
537
- it "filters rows" do
538
- df = Daru::DataFrame.new({a: [1,2,3], b: [2,3,4]})
594
+ a = df.filter_rows do |row|
595
+ row[:a] % 2 == 0
596
+ end
539
597
 
540
- a = df.filter_rows do |row|
541
- row[:a] % 2 == 0
598
+ expect(a).to eq(Daru::DataFrame.new({a: [2], b: [3]}, order: [:a, :b], index: [1]))
599
+ end
542
600
  end
543
601
 
544
- expect(a).to eq(Daru::DataFrame.new({a: [2], b: [3]}, vectors: [:a, :b], index: [1]))
545
- end
546
- end
602
+ context "#filter_vectors" do
603
+ it "filters vectors" do
604
+ df = Daru::DataFrame.new({a: [1,2,3], b: [2,3,4]}, dtype: dtype)
547
605
 
548
- context "#filter_vectors" do
549
- it "filters vectors" do
550
- df = Daru::DataFrame.new({a: [1,2,3], b: [2,3,4]})
606
+ a = df.filter_vectors do |vector|
607
+ vector[0] == 1
608
+ end
551
609
 
552
- a = df.filter_vectors do |vector|
553
- vector[0] == 1
610
+ expect(a).to eq(Daru::DataFrame.new({a: [1,2,3]}, dtype: dtype))
611
+ end
554
612
  end
555
613
 
556
- expect(a).to eq(Daru::DataFrame.new({a: [1,2,3]}))
557
- end
558
- end
559
-
560
- context "#to_a" do
561
- it "converts DataFrame into array of hashes" do
562
- arry = @data_frame.to_a
563
-
564
- expect(arry).to eq(
565
- [
566
- [
567
- {a: 1, b: 11, c: 11},
568
- {a: 2, b: 12, c: 22},
569
- {a: 3, b: 13, c: 33},
570
- {a: 4, b: 14, c: 44},
571
- {a: 5, b: 15, c: 55}
572
- ],
573
- [
574
- :one, :two, :three, :four, :five
575
- ]
576
- ])
614
+ context "#to_a" do
615
+ it "converts DataFrame into array of hashes" do
616
+ arry = @data_frame.to_a
617
+
618
+ expect(arry).to eq(
619
+ [
620
+ [
621
+ {a: 1, b: 11, c: 11},
622
+ {a: 2, b: 12, c: 22},
623
+ {a: 3, b: 13, c: 33},
624
+ {a: 4, b: 14, c: 44},
625
+ {a: 5, b: 15, c: 55}
626
+ ],
627
+ [
628
+ :one, :two, :three, :four, :five
629
+ ]
630
+ ])
631
+ end
632
+ end
577
633
  end
578
634
  end
579
635
  end if mri?