red_amber 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/CHANGELOG.md +69 -2
  4. data/README.md +83 -280
  5. data/doc/DataFrame.md +279 -265
  6. data/doc/Vector.md +28 -36
  7. data/doc/image/basic_verbs.png +0 -0
  8. data/doc/image/dataframe/assign.png +0 -0
  9. data/doc/image/dataframe/assign_operation.png +0 -0
  10. data/doc/image/dataframe/drop.png +0 -0
  11. data/doc/image/dataframe/pick.png +0 -0
  12. data/doc/image/dataframe/pick_operation.png +0 -0
  13. data/doc/image/dataframe/remove.png +0 -0
  14. data/doc/image/dataframe/rename.png +0 -0
  15. data/doc/image/dataframe/rename_operation.png +0 -0
  16. data/doc/image/dataframe/reshaping_DataFrames.png +0 -0
  17. data/doc/image/dataframe/slice.png +0 -0
  18. data/doc/image/dataframe/slice_operation.png +0 -0
  19. data/doc/image/dataframe_model.png +0 -0
  20. data/doc/image/group_operation.png +0 -0
  21. data/doc/image/replace-if_then.png +0 -0
  22. data/doc/image/reshaping_dataframe.png +0 -0
  23. data/doc/image/screenshot.png +0 -0
  24. data/doc/image/vector/binary_element_wise.png +0 -0
  25. data/doc/image/vector/unary_aggregation.png +0 -0
  26. data/doc/image/vector/unary_aggregation_w_option.png +0 -0
  27. data/doc/image/vector/unary_element_wise.png +0 -0
  28. data/lib/red_amber/data_frame.rb +10 -37
  29. data/lib/red_amber/data_frame_displayable.rb +56 -3
  30. data/lib/red_amber/data_frame_loadsave.rb +36 -0
  31. data/lib/red_amber/data_frame_reshaping.rb +8 -6
  32. data/lib/red_amber/data_frame_variable_operation.rb +25 -19
  33. data/lib/red_amber/group.rb +5 -3
  34. data/lib/red_amber/helper.rb +20 -18
  35. data/lib/red_amber/vector.rb +49 -30
  36. data/lib/red_amber/vector_selectable.rb +9 -1
  37. data/lib/red_amber/vector_updatable.rb +6 -3
  38. data/lib/red_amber/version.rb +1 -1
  39. data/lib/red_amber.rb +1 -0
  40. metadata +13 -3
  41. data/doc/examples_of_red_amber.ipynb +0 -8979
data/doc/DataFrame.md CHANGED
@@ -14,30 +14,38 @@ Class `RedAmber::DataFrame` represents 2D-data. A `DataFrame` consists with:
14
14
  ### `new` from a Hash
15
15
 
16
16
  ```ruby
17
- RedAmber::DataFrame.new(x: [1, 2, 3])
17
+ df = RedAmber::DataFrame.new(x: [1, 2, 3], y: %w[A B C])
18
18
  ```
19
19
 
20
20
  ### `new` from a schema (by Hash) and data (by Array)
21
21
 
22
22
  ```ruby
23
- RedAmber::DataFrame.new({:x=>:uint8}, [[1], [2], [3]])
23
+ RedAmber::DataFrame.new({x: :uint8, y: :string}, [[1, "A"], [2, "B"], [3, "C"]])
24
24
  ```
25
25
 
26
26
  ### `new` from an Arrow::Table
27
27
 
28
28
 
29
29
  ```ruby
30
- table = Arrow::Table.new(x: [1, 2, 3])
30
+ table = Arrow::Table.new(x: [1, 2, 3], y: %w[A B C])
31
31
  RedAmber::DataFrame.new(table)
32
32
  ```
33
33
 
34
+ ### `new` from an Object which responds to `to_arrow`
35
+
36
+ ```ruby
37
+ require "datasets-arrow"
38
+ dataset = Datasets::Penguins.new
39
+ RedAmber::DataFrame.new(dataset)
40
+ ```
41
+
34
42
  ### `new` from a Rover::DataFrame
35
43
 
36
44
 
37
45
  ```ruby
38
46
  require 'rover'
39
47
 
40
- rover = Rover::DataFrame.new(x: [1, 2, 3])
48
+ rover = Rover::DataFrame.new(x: [1, 2, 3], y: %w[A B C])
41
49
  RedAmber::DataFrame.new(rover)
42
50
  ```
43
51
 
@@ -63,7 +71,7 @@ Class `RedAmber::DataFrame` represents 2D-data. A `DataFrame` consists with:
63
71
  ```ruby
64
72
  require 'parquet'
65
73
 
66
- dataframe = RedAmber::DataFrame.load("file.parquet")
74
+ df = RedAmber::DataFrame.load("file.parquet")
67
75
  ```
68
76
 
69
77
  ### `save` (instance method)
@@ -79,7 +87,7 @@ Class `RedAmber::DataFrame` represents 2D-data. A `DataFrame` consists with:
79
87
  ```ruby
80
88
  require 'parquet'
81
89
 
82
- dataframe.save("file.parquet")
90
+ df.save("file.parquet")
83
91
  ```
84
92
 
85
93
  ## Properties
@@ -210,15 +218,15 @@ puts penguins.to_s
210
218
  # =>
211
219
  species island bill_length_mm bill_depth_mm flipper_length_mm ... year
212
220
  <string> <string> <double> <double> <uint8> ... <uint16>
213
- 1 Adelie Torgersen 39.1 18.7 181 ... 2007
214
- 2 Adelie Torgersen 39.5 17.4 186 ... 2007
215
- 3 Adelie Torgersen 40.3 18.0 195 ... 2007
216
- 4 Adelie Torgersen (nil) (nil) (nil) ... 2007
217
- 5 Adelie Torgersen 36.7 19.3 193 ... 2007
221
+ 0 Adelie Torgersen 39.1 18.7 181 ... 2007
222
+ 1 Adelie Torgersen 39.5 17.4 186 ... 2007
223
+ 2 Adelie Torgersen 40.3 18.0 195 ... 2007
224
+ 3 Adelie Torgersen (nil) (nil) (nil) ... 2007
225
+ 4 Adelie Torgersen 36.7 19.3 193 ... 2007
218
226
  : : : : : : ... :
219
- 342 Gentoo Biscoe 50.4 15.7 222 ... 2009
220
- 343 Gentoo Biscoe 45.2 14.8 212 ... 2009
221
- 344 Gentoo Biscoe 49.9 16.1 213 ... 2009
227
+ 341 Gentoo Biscoe 50.4 15.7 222 ... 2009
228
+ 342 Gentoo Biscoe 45.2 14.8 212 ... 2009
229
+ 343 Gentoo Biscoe 49.9 16.1 213 ... 2009
222
230
  ```
223
231
  ### `inspect`
224
232
 
@@ -235,11 +243,11 @@ puts penguins.summary.to_s(width: 82) # needs more width to show all stats in th
235
243
  # =>
236
244
  variables count mean std min 25% median 75% max
237
245
  <dictionary> <uint16> <double> <double> <double> <double> <double> <double> <double>
238
- 1 bill_length_mm 342 43.92 5.46 32.1 39.23 44.38 48.5 59.6
239
- 2 bill_depth_mm 342 17.15 1.97 13.1 15.6 17.32 18.7 21.5
240
- 3 flipper_length_mm 342 200.92 14.06 172.0 190.0 197.0 213.0 231.0
241
- 4 body_mass_g 342 4201.75 801.95 2700.0 3550.0 4031.5 4750.0 6300.0
242
- 5 year 344 2008.03 0.82 2007.0 2007.0 2008.0 2009.0 2009.0
246
+ 0 bill_length_mm 342 43.92 5.46 32.1 39.23 44.38 48.5 59.6
247
+ 1 bill_depth_mm 342 17.15 1.97 13.1 15.6 17.32 18.7 21.5
248
+ 2 flipper_length_mm 342 200.92 14.06 172.0 190.0 197.0 213.0 231.0
249
+ 3 body_mass_g 342 4201.75 801.95 2700.0 3550.0 4031.5 4750.0 6300.0
250
+ 4 year 344 2008.03 0.82 2007.0 2007.0 2008.0 2009.0 2009.0
243
251
  ```
244
252
 
245
253
  ### `to_rover`
@@ -265,21 +273,22 @@ penguins.to_rover
265
273
  require 'red_amber'
266
274
  require 'datasets-arrow'
267
275
 
268
- penguins = Datasets::Penguins.new.to_arrow
269
- RedAmber::DataFrame.new(penguins).tdr
276
+ dataset = Datasets::Penguins.new
277
+ # (From 0.2.2) responsible to the object which has `to_arrow` method.
278
+ RedAmber::DataFrame.new(dataset).tdr
270
279
 
271
280
  # =>
272
281
  RedAmber::DataFrame : 344 x 8 Vectors
273
282
  Vectors : 5 numeric, 3 strings
274
283
  # key type level data_preview
275
- 1 :species string 3 {"Adelie"=>152, "Chinstrap"=>68, "Gentoo"=>124}
276
- 2 :island string 3 {"Torgersen"=>52, "Biscoe"=>168, "Dream"=>124}
277
- 3 :bill_length_mm double 165 [39.1, 39.5, 40.3, nil, 36.7, ... ], 2 nils
278
- 4 :bill_depth_mm double 81 [18.7, 17.4, 18.0, nil, 19.3, ... ], 2 nils
279
- 5 :flipper_length_mm uint8 56 [181, 186, 195, nil, 193, ... ], 2 nils
280
- 6 :body_mass_g uint16 95 [3750, 3800, 3250, nil, 3450, ... ], 2 nils
281
- 7 :sex string 3 {"male"=>168, "female"=>165, nil=>11}
282
- 8 :year uint16 3 {2007=>110, 2008=>114, 2009=>120}
284
+ 0 :species string 3 {"Adelie"=>152, "Chinstrap"=>68, "Gentoo"=>124}
285
+ 1 :island string 3 {"Torgersen"=>52, "Biscoe"=>168, "Dream"=>124}
286
+ 2 :bill_length_mm double 165 [39.1, 39.5, 40.3, nil, 36.7, ... ], 2 nils
287
+ 3 :bill_depth_mm double 81 [18.7, 17.4, 18.0, nil, 19.3, ... ], 2 nils
288
+ 4 :flipper_length_mm uint8 56 [181, 186, 195, nil, 193, ... ], 2 nils
289
+ 5 :body_mass_g uint16 95 [3750, 3800, 3250, nil, 3450, ... ], 2 nils
290
+ 6 :sex string 3 {"male"=>168, "female"=>165, nil=>11}
291
+ 7 :year uint16 3 {2007=>110, 2008=>114, 2009=>120}
283
292
  ```
284
293
 
285
294
  - limit: limit of variables to show. Default value is 10.
@@ -311,9 +320,9 @@ penguins.to_rover
311
320
  #<RedAmber::DataFrame : 3 x 3 Vectors, 0x00000000000328fc>
312
321
  b c a
313
322
  <string> <double> <uint8>
314
- 1 A 1.0 1
315
- 2 B 2.0 2
316
- 3 C 3.0 3
323
+ 0 A 1.0 1
324
+ 1 B 2.0 2
325
+ 2 C 3.0 3
317
326
  ```
318
327
 
319
328
  If `#[]` represents single variable (column), it returns a Vector object.
@@ -359,10 +368,10 @@ penguins.to_rover
359
368
  #<RedAmber::DataFrame : 4 x 3 Vectors, 0x0000000000033270>
360
369
  a b c
361
370
  <uint8> <string> <double>
362
- 1 3 C 3.0
363
- 2 1 A 1.0
364
- 3 2 B 2.0
365
- 4 3 C 3.0
371
+ 0 3 C 3.0
372
+ 1 1 A 1.0
373
+ 2 2 B 2.0
374
+ 3 3 C 3.0
366
375
  ```
367
376
 
368
377
  - Select obs. by a boolean Array or a boolean RedAmber::Vector at same size as self.
@@ -405,15 +414,15 @@ penguins.to_rover
405
414
  #<RedAmber::DataFrame : 344 x 2 Vectors, 0x0000000000035ebc>
406
415
  species bill_length_mm
407
416
  <string> <double>
408
- 1 Adelie 39.1
409
- 2 Adelie 39.5
410
- 3 Adelie 40.3
411
- 4 Adelie (nil)
412
- 5 Adelie 36.7
417
+ 0 Adelie 39.1
418
+ 1 Adelie 39.5
419
+ 2 Adelie 40.3
420
+ 3 Adelie (nil)
421
+ 4 Adelie 36.7
413
422
  : : :
414
- 342 Gentoo 50.4
415
- 343 Gentoo 45.2
416
- 344 Gentoo 49.9
423
+ 341 Gentoo 50.4
424
+ 342 Gentoo 45.2
425
+ 343 Gentoo 49.9
417
426
  ```
418
427
 
419
428
  - Indices as arguments
@@ -427,15 +436,15 @@ penguins.to_rover
427
436
  #<RedAmber::DataFrame : 344 x 4 Vectors, 0x0000000000055ce4>
428
437
  species island bill_length_mm year
429
438
  <string> <string> <double> <uint16>
430
- 1 Adelie Torgersen 39.1 2007
431
- 2 Adelie Torgersen 39.5 2007
432
- 3 Adelie Torgersen 40.3 2007
433
- 4 Adelie Torgersen (nil) 2007
434
- 5 Adelie Torgersen 36.7 2007
439
+ 0 Adelie Torgersen 39.1 2007
440
+ 1 Adelie Torgersen 39.5 2007
441
+ 2 Adelie Torgersen 40.3 2007
442
+ 3 Adelie Torgersen (nil) 2007
443
+ 4 Adelie Torgersen 36.7 2007
435
444
  : : : : :
436
- 342 Gentoo Biscoe 50.4 2009
437
- 343 Gentoo Biscoe 45.2 2009
438
- 344 Gentoo Biscoe 49.9 2009
445
+ 341 Gentoo Biscoe 50.4 2009
446
+ 342 Gentoo Biscoe 45.2 2009
447
+ 343 Gentoo Biscoe 49.9 2009
439
448
  ```
440
449
 
441
450
  - Booleans as arguments
@@ -443,21 +452,21 @@ penguins.to_rover
443
452
  `pick(booleans)` accepts booleans as arguments in an Array. Booleans must be same length as `n_keys`.
444
453
 
445
454
  ```ruby
446
- penguins.pick(penguins.types.map { |type| type == :string })
455
+ penguins.pick(penguins.vectors.map(&:string?))
447
456
 
448
457
  # =>
449
458
  #<RedAmber::DataFrame : 344 x 3 Vectors, 0x00000000000387ac>
450
459
  species island sex
451
460
  <string> <string> <string>
452
- 1 Adelie Torgersen male
461
+ 0 Adelie Torgersen male
462
+ 1 Adelie Torgersen female
453
463
  2 Adelie Torgersen female
454
- 3 Adelie Torgersen female
455
- 4 Adelie Torgersen (nil)
456
- 5 Adelie Torgersen female
464
+ 3 Adelie Torgersen (nil)
465
+ 4 Adelie Torgersen female
457
466
  : : : :
458
- 342 Gentoo Biscoe male
459
- 343 Gentoo Biscoe female
460
- 344 Gentoo Biscoe male
467
+ 341 Gentoo Biscoe male
468
+ 342 Gentoo Biscoe female
469
+ 343 Gentoo Biscoe male
461
470
  ```
462
471
 
463
472
  - Keys or booleans by a block
@@ -471,15 +480,15 @@ penguins.to_rover
471
480
  #<RedAmber::DataFrame : 344 x 3 Vectors, 0x000000000003dd4c>
472
481
  bill_length_mm bill_depth_mm flipper_length_mm
473
482
  <double> <double> <uint8>
474
- 1 39.1 18.7 181
475
- 2 39.5 17.4 186
476
- 3 40.3 18.0 195
477
- 4 (nil) (nil) (nil)
478
- 5 36.7 19.3 193
483
+ 0 39.1 18.7 181
484
+ 1 39.5 17.4 186
485
+ 2 40.3 18.0 195
486
+ 3 (nil) (nil) (nil)
487
+ 4 36.7 19.3 193
479
488
  : : : :
480
- 342 50.4 15.7 222
481
- 343 45.2 14.8 212
482
- 344 49.9 16.1 213
489
+ 341 50.4 15.7 222
490
+ 342 45.2 14.8 212
491
+ 343 49.9 16.1 213
483
492
  ```
484
493
 
485
494
  ### `drop ` - pick and drop -
@@ -526,9 +535,9 @@ penguins.to_rover
526
535
  #<RedAmber::DataFrame : 3 x 1 Vector, 0x000000000003f4bc>
527
536
  a
528
537
  <uint8>
529
- 1 1
530
- 2 2
531
- 3 3
538
+ 0 1
539
+ 1 2
540
+ 2 3
532
541
 
533
542
  df[:a]
534
543
 
@@ -566,17 +575,17 @@ penguins.to_rover
566
575
 
567
576
  # =>
568
577
  #<RedAmber::DataFrame : 10 x 8 Vectors, 0x0000000000042be4>
569
- species island bill_length_mm bill_depth_mm flipper_length_mm ... year
570
- <string> <string> <double> <double> <uint8> ... <uint16>
571
- 1 Adelie Torgersen 39.1 18.7 181 ... 2007
572
- 2 Adelie Torgersen 39.5 17.4 186 ... 2007
573
- 3 Adelie Torgersen 40.3 18.0 195 ... 2007
574
- 4 Adelie Torgersen (nil) (nil) (nil) ... 2007
575
- 5 Adelie Torgersen 36.7 19.3 193 ... 2007
576
- : : : : : : ... :
577
- 8 Gentoo Biscoe 50.4 15.7 222 ... 2009
578
- 9 Gentoo Biscoe 45.2 14.8 212 ... 2009
579
- 10 Gentoo Biscoe 49.9 16.1 213 ... 2009
578
+ species island bill_length_mm bill_depth_mm flipper_length_mm ... year
579
+ <string> <string> <double> <double> <uint8> ... <uint16>
580
+ 0 Adelie Torgersen 39.1 18.7 181 ... 2007
581
+ 1 Adelie Torgersen 39.5 17.4 186 ... 2007
582
+ 2 Adelie Torgersen 40.3 18.0 195 ... 2007
583
+ 3 Adelie Torgersen (nil) (nil) (nil) ... 2007
584
+ 4 Adelie Torgersen 36.7 19.3 193 ... 2007
585
+ : : : : : : ... :
586
+ 7 Gentoo Biscoe 50.4 15.7 222 ... 2009
587
+ 8 Gentoo Biscoe 45.2 14.8 212 ... 2009
588
+ 9 Gentoo Biscoe 49.9 16.1 213 ... 2009
580
589
  ```
581
590
 
582
591
  - Booleans as an argument
@@ -591,15 +600,15 @@ penguins.to_rover
591
600
  #<RedAmber::DataFrame : 242 x 8 Vectors, 0x0000000000043d3c>
592
601
  species island bill_length_mm bill_depth_mm flipper_length_mm ... year
593
602
  <string> <string> <double> <double> <uint8> ... <uint16>
594
- 1 Adelie Torgersen 40.3 18.0 195 ... 2007
595
- 2 Adelie Torgersen 42.0 20.2 190 ... 2007
596
- 3 Adelie Torgersen 41.1 17.6 182 ... 2007
597
- 4 Adelie Torgersen 42.5 20.7 197 ... 2007
598
- 5 Adelie Torgersen 46.0 21.5 194 ... 2007
603
+ 0 Adelie Torgersen 40.3 18.0 195 ... 2007
604
+ 1 Adelie Torgersen 42.0 20.2 190 ... 2007
605
+ 2 Adelie Torgersen 41.1 17.6 182 ... 2007
606
+ 3 Adelie Torgersen 42.5 20.7 197 ... 2007
607
+ 4 Adelie Torgersen 46.0 21.5 194 ... 2007
599
608
  : : : : : : ... :
600
- 240 Gentoo Biscoe 50.4 15.7 222 ... 2009
601
- 241 Gentoo Biscoe 45.2 14.8 212 ... 2009
602
- 242 Gentoo Biscoe 49.9 16.1 213 ... 2009
609
+ 239 Gentoo Biscoe 50.4 15.7 222 ... 2009
610
+ 240 Gentoo Biscoe 45.2 14.8 212 ... 2009
611
+ 241 Gentoo Biscoe 49.9 16.1 213 ... 2009
603
612
  ```
604
613
 
605
614
  - Indices or booleans by a block
@@ -619,15 +628,15 @@ penguins.to_rover
619
628
  #<RedAmber::DataFrame : 204 x 8 Vectors, 0x0000000000047a40>
620
629
  species island bill_length_mm bill_depth_mm flipper_length_mm ... year
621
630
  <string> <string> <double> <double> <uint8> ... <uint16>
622
- 1 Adelie Torgersen 39.1 18.7 181 ... 2007
623
- 2 Adelie Torgersen 39.5 17.4 186 ... 2007
624
- 3 Adelie Torgersen 40.3 18.0 195 ... 2007
625
- 4 Adelie Torgersen 39.3 20.6 190 ... 2007
626
- 5 Adelie Torgersen 38.9 17.8 181 ... 2007
631
+ 0 Adelie Torgersen 39.1 18.7 181 ... 2007
632
+ 1 Adelie Torgersen 39.5 17.4 186 ... 2007
633
+ 2 Adelie Torgersen 40.3 18.0 195 ... 2007
634
+ 3 Adelie Torgersen 39.3 20.6 190 ... 2007
635
+ 4 Adelie Torgersen 38.9 17.8 181 ... 2007
627
636
  : : : : : : ... :
628
- 202 Gentoo Biscoe 47.2 13.7 214 ... 2009
629
- 203 Gentoo Biscoe 46.8 14.3 215 ... 2009
630
- 204 Gentoo Biscoe 45.2 14.8 212 ... 2009
637
+ 201 Gentoo Biscoe 47.2 13.7 214 ... 2009
638
+ 202 Gentoo Biscoe 46.8 14.3 215 ... 2009
639
+ 203 Gentoo Biscoe 45.2 14.8 212 ... 2009
631
640
  ```
632
641
 
633
642
  - Notice: nil option
@@ -674,15 +683,15 @@ penguins.to_rover
674
683
  #<RedAmber::DataFrame : 334 x 8 Vectors, 0x00000000000487c4>
675
684
  species island bill_length_mm bill_depth_mm flipper_length_mm ... year
676
685
  <string> <string> <double> <double> <uint8> ... <uint16>
677
- 1 Adelie Torgersen 39.3 20.6 190 ... 2007
678
- 2 Adelie Torgersen 38.9 17.8 181 ... 2007
679
- 3 Adelie Torgersen 39.2 19.6 195 ... 2007
680
- 4 Adelie Torgersen 34.1 18.1 193 ... 2007
681
- 5 Adelie Torgersen 42.0 20.2 190 ... 2007
686
+ 0 Adelie Torgersen 39.3 20.6 190 ... 2007
687
+ 1 Adelie Torgersen 38.9 17.8 181 ... 2007
688
+ 2 Adelie Torgersen 39.2 19.6 195 ... 2007
689
+ 3 Adelie Torgersen 34.1 18.1 193 ... 2007
690
+ 4 Adelie Torgersen 42.0 20.2 190 ... 2007
682
691
  : : : : : : ... :
683
- 332 Gentoo Biscoe 44.5 15.7 217 ... 2009
684
- 333 Gentoo Biscoe 48.8 16.2 222 ... 2009
685
- 334 Gentoo Biscoe 47.2 13.7 214 ... 2009
692
+ 331 Gentoo Biscoe 44.5 15.7 217 ... 2009
693
+ 332 Gentoo Biscoe 48.8 16.2 222 ... 2009
694
+ 333 Gentoo Biscoe 47.2 13.7 214 ... 2009
686
695
  ```
687
696
 
688
697
  - Booleans as an argument
@@ -698,15 +707,15 @@ penguins.to_rover
698
707
  #<RedAmber::DataFrame : 333 x 8 Vectors, 0x0000000000049fac>
699
708
  species island bill_length_mm bill_depth_mm flipper_length_mm ... year
700
709
  <string> <string> <double> <double> <uint8> ... <uint16>
701
- 1 Adelie Torgersen 39.1 18.7 181 ... 2007
702
- 2 Adelie Torgersen 39.5 17.4 186 ... 2007
703
- 3 Adelie Torgersen 40.3 18.0 195 ... 2007
704
- 4 Adelie Torgersen 36.7 19.3 193 ... 2007
705
- 5 Adelie Torgersen 39.3 20.6 190 ... 2007
710
+ 0 Adelie Torgersen 39.1 18.7 181 ... 2007
711
+ 1 Adelie Torgersen 39.5 17.4 186 ... 2007
712
+ 2 Adelie Torgersen 40.3 18.0 195 ... 2007
713
+ 3 Adelie Torgersen 36.7 19.3 193 ... 2007
714
+ 4 Adelie Torgersen 39.3 20.6 190 ... 2007
706
715
  : : : : : : ... :
707
- 331 Gentoo Biscoe 50.4 15.7 222 ... 2009
708
- 332 Gentoo Biscoe 45.2 14.8 212 ... 2009
709
- 333 Gentoo Biscoe 49.9 16.1 213 ... 2009
716
+ 330 Gentoo Biscoe 50.4 15.7 222 ... 2009
717
+ 331 Gentoo Biscoe 45.2 14.8 212 ... 2009
718
+ 332 Gentoo Biscoe 49.9 16.1 213 ... 2009
710
719
  ```
711
720
 
712
721
  - Indices or booleans by a block
@@ -727,15 +736,15 @@ penguins.to_rover
727
736
  #<RedAmber::DataFrame : 140 x 8 Vectors, 0x000000000004de40>
728
737
  species island bill_length_mm bill_depth_mm flipper_length_mm ... year
729
738
  <string> <string> <double> <double> <uint8> ... <uint16>
730
- 1 Adelie Torgersen (nil) (nil) (nil) ... 2007
731
- 2 Adelie Torgersen 36.7 19.3 193 ... 2007
732
- 3 Adelie Torgersen 34.1 18.1 193 ... 2007
733
- 4 Adelie Torgersen 37.8 17.1 186 ... 2007
734
- 5 Adelie Torgersen 37.8 17.3 180 ... 2007
739
+ 0 Adelie Torgersen (nil) (nil) (nil) ... 2007
740
+ 1 Adelie Torgersen 36.7 19.3 193 ... 2007
741
+ 2 Adelie Torgersen 34.1 18.1 193 ... 2007
742
+ 3 Adelie Torgersen 37.8 17.1 186 ... 2007
743
+ 4 Adelie Torgersen 37.8 17.3 180 ... 2007
735
744
  : : : : : : ... :
736
- 138 Gentoo Biscoe (nil) (nil) (nil) ... 2009
737
- 139 Gentoo Biscoe 50.4 15.7 222 ... 2009
738
- 140 Gentoo Biscoe 49.9 16.1 213 ... 2009
745
+ 137 Gentoo Biscoe (nil) (nil) (nil) ... 2009
746
+ 138 Gentoo Biscoe 50.4 15.7 222 ... 2009
747
+ 139 Gentoo Biscoe 49.9 16.1 213 ... 2009
739
748
  ```
740
749
 
741
750
  - Notice for nil
@@ -770,8 +779,8 @@ penguins.to_rover
770
779
  #<RedAmber::DataFrame : 2 x 3 Vectors, 0x000000000005df98>
771
780
  a b c
772
781
  <uint8> <string> <double>
773
- 1 1 A 1.0
774
- 2 (nil) C 3.0
782
+ 0 1 A 1.0
783
+ 1 (nil) C 3.0
775
784
  ```
776
785
 
777
786
  ### `rename`
@@ -792,9 +801,9 @@ penguins.to_rover
792
801
  #<RedAmber::DataFrame : 3 x 2 Vectors, 0x0000000000060838>
793
802
  name age_in_1993
794
803
  <string> <uint8>
795
- 1 Yasuko 68
796
- 2 Rui 49
797
- 3 Hinata 28
804
+ 0 Yasuko 68
805
+ 1 Rui 49
806
+ 2 Hinata 28
798
807
  ```
799
808
 
800
809
  - Key pairs by a block
@@ -832,9 +841,9 @@ penguins.to_rover
832
841
  #<RedAmber::DataFrame : 3 x 2 Vectors, 0x0000000000062804>
833
842
  name age
834
843
  <string> <uint8>
835
- 1 Yasuko 68
836
- 2 Rui 49
837
- 3 Hinata 28
844
+ 0 Yasuko 68
845
+ 1 Rui 49
846
+ 2 Hinata 28
838
847
 
839
848
  # update :age and add :brother
840
849
  df.assign do
@@ -848,9 +857,9 @@ penguins.to_rover
848
857
  #<RedAmber::DataFrame : 3 x 3 Vectors, 0x00000000000658b0>
849
858
  name age brother
850
859
  <string> <uint8> <string>
851
- 1 Yasuko 97 Santa
852
- 2 Rui 78 (nil)
853
- 3 Hinata 57 Momotaro
860
+ 0 Yasuko 97 Santa
861
+ 1 Rui 78 (nil)
862
+ 2 Hinata 57 Momotaro
854
863
  ```
855
864
 
856
865
  - Key pairs by a block
@@ -869,11 +878,11 @@ penguins.to_rover
869
878
  #<RedAmber::DataFrame : 5 x 3 Vectors, 0x0000000000069e60>
870
879
  index float string
871
880
  <uint8> <double> <string>
872
- 1 0 0.0 A
873
- 2 1 1.1 B
874
- 3 2 2.2 C
875
- 4 3 NaN D
876
- 5 (nil) (nil) (nil)
881
+ 0 0 0.0 A
882
+ 1 1 1.1 B
883
+ 2 2 2.2 C
884
+ 3 3 NaN D
885
+ 4 (nil) (nil) (nil)
877
886
 
878
887
  # update :float
879
888
  # assigner by an Array
@@ -886,11 +895,11 @@ penguins.to_rover
886
895
  #<RedAmber::DataFrame : 5 x 3 Vectors, 0x00000000000dfffc>
887
896
  index float string
888
897
  <uint8> <double> <string>
889
- 1 0 -0.0 A
890
- 2 1 -1.1 B
891
- 3 2 -2.2 C
892
- 4 3 NaN D
893
- 5 (nil) (nil) (nil)
898
+ 0 0 -0.0 A
899
+ 1 1 -1.1 B
900
+ 2 2 -2.2 C
901
+ 3 3 NaN D
902
+ 4 (nil) (nil) (nil)
894
903
 
895
904
  # Or we can use assigner by a Hash
896
905
  df.assign do
@@ -921,11 +930,11 @@ penguins.to_rover
921
930
  #<RedAmber::DataFrame : 5 x 4 Vectors, 0x000000000001787c>
922
931
  new_index index float string
923
932
  <uint8> <uint8> <double> <string>
924
- 1 1 0 0.0 A
925
- 2 2 1 1.1 B
926
- 3 3 2 2.2 C
927
- 4 4 3 NaN D
928
- 5 5 (nil) (nil) (nil)
933
+ 0 1 0 0.0 A
934
+ 1 2 1 1.1 B
935
+ 2 3 2 2.2 C
936
+ 3 4 3 NaN D
937
+ 4 5 (nil) (nil) (nil)
929
938
  ```
930
939
 
931
940
  ### `slice_by(key, keep_key: false) { block }`
@@ -946,11 +955,11 @@ penguins.to_rover
946
955
  #<RedAmber::DataFrame : 5 x 3 Vectors, 0x0000000000069e60>
947
956
  index float string
948
957
  <uint8> <double> <string>
949
- 1 0 0.0 A
950
- 2 1 1.1 B
951
- 3 2 2.2 C
952
- 4 3 NaN D
953
- 5 (nil) (nil) (nil)
958
+ 0 0 0.0 A
959
+ 1 1 1.1 B
960
+ 2 2 2.2 C
961
+ 3 3 NaN D
962
+ 4 (nil) (nil) (nil)
954
963
 
955
964
  df.slice_by(:string) { ["A", "C"] }
956
965
 
@@ -958,8 +967,8 @@ penguins.to_rover
958
967
  #<RedAmber::DataFrame : 2 x 2 Vectors, 0x000000000001b1ac>
959
968
  index float
960
969
  <uint8> <double>
961
- 1 0 0.0
962
- 2 2 2.2
970
+ 0 0 0.0
971
+ 1 2 2.2
963
972
  ```
964
973
 
965
974
  It is the same behavior as;
@@ -977,9 +986,9 @@ It is the same behavior as;
977
986
  #<RedAmber::DataFrame : 3 x 2 Vectors, 0x0000000000069668>
978
987
  index float
979
988
  <uint8> <double>
980
- 1 0 0.0
981
- 2 1 1.1
982
- 3 2 2.2
989
+ 0 0 0.0
990
+ 1 1 1.1
991
+ 2 2 2.2
983
992
  ```
984
993
 
985
994
  When the option `keep_key: true` used, the column `key` will be preserved.
@@ -991,9 +1000,9 @@ When the option `keep_key: true` used, the column `key` will be preserved.
991
1000
  #<RedAmber::DataFrame : 3 x 3 Vectors, 0x0000000000073c44>
992
1001
  index float string
993
1002
  <uint8> <double> <string>
994
- 1 0 0.0 A
995
- 2 1 1.1 B
996
- 3 2 2.2 C
1003
+ 0 0 0.0 A
1004
+ 1 1 1.1 B
1005
+ 2 2 2.2 C
997
1006
  ```
998
1007
 
999
1008
  ## Updating
@@ -1016,11 +1025,11 @@ When the option `keep_key: true` used, the column `key` will be preserved.
1016
1025
  #<RedAmber::DataFrame : 5 x 3 Vectors, 0x000000000009b03c>
1017
1026
  index string bool
1018
1027
  <uint8> <string> <boolean>
1019
- 1 0 (nil) false
1020
- 2 0 B false
1021
- 3 1 B true
1022
- 4 1 C (nil)
1023
- 5 (nil) A true
1028
+ 0 0 (nil) false
1029
+ 1 0 B false
1030
+ 2 1 B true
1031
+ 3 1 C (nil)
1032
+ 4 (nil) A true
1024
1033
  ```
1025
1034
 
1026
1035
  - [ ] Clamp
@@ -1037,7 +1046,7 @@ When the option `keep_key: true` used, the column `key` will be preserved.
1037
1046
 
1038
1047
  ### `group(group_keys)`
1039
1048
 
1040
- `group` creates a class `Group` object. `Group` accepts functions below as a method.
1049
+ `group` creates a instance of class `Group`. `Group` accepts functions below as a method.
1041
1050
  Method accepts options as `group_keys`.
1042
1051
 
1043
1052
  Available functions are:
@@ -1064,23 +1073,22 @@ When the option `keep_key: true` used, the column `key` will be preserved.
1064
1073
  This is an example of grouping of famous STARWARS dataset.
1065
1074
 
1066
1075
  ```ruby
1067
- starwars =
1068
- RedAmber::DataFrame.load(URI("https://vincentarelbundock.github.io/Rdatasets/csv/dplyr/starwars.csv"))
1069
- starwars
1076
+ uri = URI("https://vincentarelbundock.github.io/Rdatasets/csv/dplyr/starwars.csv")
1077
+ starwars = RedAmber::DataFrame.load(uri)
1070
1078
 
1071
1079
  # =>
1072
1080
  #<RedAmber::DataFrame : 87 x 12 Vectors, 0x0000000000005a50>
1073
1081
  unnamed1 name height mass hair_color skin_color eye_color ... species
1074
1082
  <int64> <string> <int64> <double> <string> <string> <string> ... <string>
1075
- 1 1 Luke Skywalker 172 77.0 blond fair blue ... Human
1076
- 2 2 C-3PO 167 75.0 NA gold yellow ... Droid
1077
- 3 3 R2-D2 96 32.0 NA white, blue red ... Droid
1078
- 4 4 Darth Vader 202 136.0 none white yellow ... Human
1079
- 5 5 Leia Organa 150 49.0 brown light brown ... Human
1083
+ 0 1 Luke Skywalker 172 77.0 blond fair blue ... Human
1084
+ 1 2 C-3PO 167 75.0 NA gold yellow ... Droid
1085
+ 2 3 R2-D2 96 32.0 NA white, blue red ... Droid
1086
+ 3 4 Darth Vader 202 136.0 none white yellow ... Human
1087
+ 4 5 Leia Organa 150 49.0 brown light brown ... Human
1080
1088
  : : : : : : : : ... :
1081
- 85 85 BB8 (nil) (nil) none none black ... Droid
1082
- 86 86 Captain Phasma (nil) (nil) unknown unknown unknown ... NA
1083
- 87 87 Padmé Amidala 165 45.0 brown light brown ... Human
1089
+ 84 85 BB8 (nil) (nil) none none black ... Droid
1090
+ 85 86 Captain Phasma (nil) (nil) unknown unknown unknown ... NA
1091
+ 86 87 Padmé Amidala 165 45.0 brown light brown ... Human
1084
1092
 
1085
1093
  starwars.tdr(12)
1086
1094
 
@@ -1088,58 +1096,60 @@ When the option `keep_key: true` used, the column `key` will be preserved.
1088
1096
  RedAmber::DataFrame : 87 x 12 Vectors
1089
1097
  Vectors : 4 numeric, 8 strings
1090
1098
  # key type level data_preview
1091
- 1 :unnamed1 int64 87 [1, 2, 3, 4, 5, ... ]
1092
- 2 :name string 87 ["Luke Skywalker", "C-3PO", "R2-D2", "Darth Vader", "Leia Organa", ... ]
1093
- 3 :height int64 46 [172, 167, 96, 202, 150, ... ], 6 nils
1094
- 4 :mass double 39 [77.0, 75.0, 32.0, 136.0, 49.0, ... ], 28 nils
1095
- 5 :hair_color string 13 ["blond", "NA", "NA", "none", "brown", ... ]
1096
- 6 :skin_color string 31 ["fair", "gold", "white, blue", "white", "light", ... ]
1097
- 7 :eye_color string 15 ["blue", "yellow", "red", "yellow", "brown", ... ]
1098
- 8 :birth_year double 37 [19.0, 112.0, 33.0, 41.9, 19.0, ... ], 44 nils
1099
- 9 :sex string 5 {"male"=>60, "none"=>6, "female"=>16, "hermaphroditic"=>1, "NA"=>4}
1100
- 10 :gender string 3 {"masculine"=>66, "feminine"=>17, "NA"=>4}
1101
- 11 :homeworld string 49 ["Tatooine", "Tatooine", "Naboo", "Tatooine", "Alderaan", ... ]
1102
- 12 :species string 38 ["Human", "Droid", "Droid", "Human", "Human", ... ]
1099
+ 0 :unnamed1 int64 87 [1, 2, 3, 4, 5, ... ]
1100
+ 1 :name string 87 ["Luke Skywalker", "C-3PO", "R2-D2", "Darth Vader", "Leia Organa", ... ]
1101
+ 2 :height int64 46 [172, 167, 96, 202, 150, ... ], 6 nils
1102
+ 3 :mass double 39 [77.0, 75.0, 32.0, 136.0, 49.0, ... ], 28 nils
1103
+ 4 :hair_color string 13 ["blond", "NA", "NA", "none", "brown", ... ]
1104
+ 5 :skin_color string 31 ["fair", "gold", "white, blue", "white", "light", ... ]
1105
+ 6 :eye_color string 15 ["blue", "yellow", "red", "yellow", "brown", ... ]
1106
+ 7 :birth_year double 37 [19.0, 112.0, 33.0, 41.9, 19.0, ... ], 44 nils
1107
+ 8 :sex string 5 {"male"=>60, "none"=>6, "female"=>16, "hermaphroditic"=>1, "NA"=>4}
1108
+ 9 :gender string 3 {"masculine"=>66, "feminine"=>17, "NA"=>4}
1109
+ 10 :homeworld string 49 ["Tatooine", "Tatooine", "Naboo", "Tatooine", "Alderaan", ... ]
1110
+ 11 :species string 38 ["Human", "Droid", "Droid", "Human", "Human", ... ]
1103
1111
  ```
1104
1112
 
1105
1113
  We can group by `:species` and calculate the count.
1106
1114
 
1107
1115
  ```ruby
1108
- starwars.group(:species).count(:species)
1116
+ starwars.remove { species == "NA" }
1117
+ .group(:species).count(:species)
1109
1118
 
1110
1119
  # =>
1111
- #<RedAmber::DataFrame : 38 x 2 Vectors, 0x000000000001d6f0>
1120
+ #<RedAmber::DataFrame : 37 x 2 Vectors, 0x000000000000ffa0>
1112
1121
  species count
1113
1122
  <string> <int64>
1114
- 1 Human 35
1115
- 2 Droid 6
1116
- 3 Wookiee 2
1117
- 4 Rodian 1
1118
- 5 Hutt 1
1123
+ 0 Human 35
1124
+ 1 Droid 6
1125
+ 2 Wookiee 2
1126
+ 3 Rodian 1
1127
+ 4 Hutt 1
1119
1128
  : : :
1120
- 36 Kaleesh 1
1121
- 37 Pau'an 1
1122
- 38 Kel Dor 1
1129
+ 34 Kaleesh 1
1130
+ 35 Pau'an 1
1131
+ 36 Kel Dor 1
1123
1132
  ```
1124
1133
 
1125
1134
  We can also calculate the mean of `:mass` and `:height` together.
1126
1135
 
1127
1136
  ```ruby
1128
- grouped = starwars.group(:species) { [count(:species), mean(:height, :mass)] }
1137
+ grouped = starwars.remove { species == "NA" }
1138
+ .group(:species) { [count(:species), mean(:height, :mass)] }
1129
1139
 
1130
1140
  # =>
1131
- #<RedAmber::DataFrame : 38 x 4 Vectors, 0x00000000000407cc>
1132
- specie s count mean(height) mean(mass)
1133
- <strin g> <int64> <double> <double>
1134
- 1 Human 35 176.6 82.8
1135
- 2 Droid 6 131.2 69.8
1136
- 3 Wookie e 2 231.0 124.0
1137
- 4 Rodian 1 173.0 74.0
1138
- 5 Hutt 1 175.0 1358.0
1139
- : : : : :
1140
- 36 Kalees h 1 216.0 159.0
1141
- 37 Pau'an 1 206.0 80.0
1142
- 38 Kel Dor 1 188.0 80.0
1141
+ #<RedAmber::DataFrame : 37 x 4 Vectors, 0x000000000000fff0>
1142
+ species count mean(height) mean(mass)
1143
+ <string> <int64> <double> <double>
1144
+ 0 Human 35 176.65 82.78
1145
+ 1 Droid 6 131.2 69.75
1146
+ 2 Wookiee 2 231.0 124.0
1147
+ 3 Rodian 1 173.0 74.0
1148
+ 4 Hutt 1 175.0 1358.0
1149
+ : : : : :
1150
+ 34 Kaleesh 1 216.0 159.0
1151
+ 35 Pau'an 1 206.0 80.0
1152
+ 36 Kel Dor 1 188.0 80.0
1143
1153
  ```
1144
1154
 
1145
1155
  Select rows for count > 1.
@@ -1148,22 +1158,23 @@ When the option `keep_key: true` used, the column `key` will be preserved.
1148
1158
  grouped.slice(grouped[:count] > 1)
1149
1159
 
1150
1160
  # =>
1151
- #<RedAmber::DataFrame : 9 x 4 Vectors, 0x000000000004c270>
1161
+ #<RedAmber::DataFrame : 8 x 4 Vectors, 0x000000000001002c>
1152
1162
  species count mean(height) mean(mass)
1153
1163
  <string> <int64> <double> <double>
1154
- 1 Human 35 176.6 82.8
1155
- 2 Droid 6 131.2 69.8
1156
- 3 Wookiee 2 231.0 124.0
1157
- 4 Gungan 3 208.7 74.0
1158
- 5 NA 4 181.3 48.0
1159
- : : : : :
1160
- 7 Twi'lek 2 179.0 55.0
1161
- 8 Mirialan 2 168.0 53.1
1162
- 9 Kaminoan 2 221.0 88.0
1164
+ 0 Human 35 176.65 82.78
1165
+ 1 Droid 6 131.2 69.75
1166
+ 2 Wookiee 2 231.0 124.0
1167
+ 3 Gungan 3 208.67 74.0
1168
+ 4 Zabrak 2 173.0 80.0
1169
+ 5 Twi'lek 2 179.0 55.0
1170
+ 6 Mirialan 2 168.0 53.1
1171
+ 7 Kaminoan 2 221.0 88.0
1163
1172
  ```
1164
1173
 
1165
1174
  ## Reshape
1166
1175
 
1176
+ ![dataframe reshapeing image](doc/../image/reshaping_dataframe.png)
1177
+
1167
1178
  ### `transpose`
1168
1179
 
1169
1180
  Creates transposed DataFrame for the wide (messy) dataframe.
@@ -1175,26 +1186,27 @@ When the option `keep_key: true` used, the column `key` will be preserved.
1175
1186
  #<RedAmber::DataFrame : 5 x 6 Vectors, 0x000000000000d520>
1176
1187
  Year Audi BMW BMW_MINI Mercedes-Benz VW
1177
1188
  <int64> <int64> <int64> <int64> <int64> <int64>
1178
- 1 2017 28336 52527 25427 68221 49040
1179
- 2 2018 26473 50982 25984 67554 51961
1180
- 3 2019 24222 46814 23813 66553 46794
1181
- 4 2020 22304 35712 20196 57041 36576
1182
- 5 2021 22535 35905 18211 51722 35215
1183
- import_cars.transpose(:Manufacturer)
1189
+ 0 2017 28336 52527 25427 68221 49040
1190
+ 1 2018 26473 50982 25984 67554 51961
1191
+ 2 2019 24222 46814 23813 66553 46794
1192
+ 3 2020 22304 35712 20196 57041 36576
1193
+ 4 2021 22535 35905 18211 51722 35215
1194
+
1195
+ import_cars.transpose(name: :Manufacturer)
1184
1196
 
1185
1197
  # =>
1186
- #<RedAmber::DataFrame : 5 x 6 Vectors, 0x000000000000ef74>
1198
+ #<RedAmber::DataFrame : 5 x 6 Vectors, 0x0000000000010a2c>
1187
1199
  Manufacturer 2017 2018 2019 2020 2021
1188
- <dictionary> <uint32> <uint32> <uint32> <uint16> <uint16>
1189
- 1 Audi 28336 26473 24222 22304 22535
1190
- 2 BMW 52527 50982 46814 35712 35905
1191
- 3 BMW_MINI 25427 25984 23813 20196 18211
1192
- 4 Mercedes-Benz 68221 67554 66553 57041 51722
1193
- 5 VW 49040 51961 46794 36576 35215
1200
+ <string> <uint32> <uint32> <uint32> <uint16> <uint16>
1201
+ 0 Audi 28336 26473 24222 22304 22535
1202
+ 1 BMW 52527 50982 46814 35712 35905
1203
+ 2 BMW_MINI 25427 25984 23813 20196 18211
1204
+ 3 Mercedes-Benz 68221 67554 66553 57041 51722
1205
+ 4 VW 49040 51961 46794 36576 35215
1194
1206
  ```
1195
1207
 
1196
1208
  The leftmost column is created by original keys. Key name of the column is
1197
- named by parameter `:name`. If `:name` is not specified, `:N` is used for the key.
1209
+ named by parameter `:name`. If `:name` is not specified, `:NAME` is used for the key.
1198
1210
 
1199
1211
  ### `to_long(*keep_keys)`
1200
1212
 
@@ -1206,39 +1218,41 @@ When the option `keep_key: true` used, the column `key` will be preserved.
1206
1218
  import_cars.to_long(:Year)
1207
1219
 
1208
1220
  # =>
1209
- #<RedAmber::DataFrame : 25 x 3 Vectors, 0x0000000000012750>
1210
- Year N V
1211
- <uint16> <dictionary> <uint32>
1212
- 1 2017 Audi 28336
1213
- 2 2017 BMW 52527
1214
- 3 2017 BMW_MINI 25427
1215
- 4 2017 Mercedes-Benz 68221
1216
- 5 2017 VW 49040
1221
+ #<RedAmber::DataFrame : 25 x 3 Vectors, 0x0000000000011864>
1222
+ Year NAME VALUE
1223
+ <uint16> <string> <uint32>
1224
+ 0 2017 Audi 28336
1225
+ 1 2017 BMW 52527
1226
+ 2 2017 BMW_MINI 25427
1227
+ 3 2017 Mercedes-Benz 68221
1228
+ 4 2017 VW 49040
1217
1229
  : : : :
1218
- 23 2021 BMW_MINI 18211
1219
- 24 2021 Mercedes-Benz 51722
1220
- 25 2021 VW 35215
1230
+ 22 2021 BMW_MINI 18211
1231
+ 23 2021 Mercedes-Benz 51722
1232
+ 24 2021 VW 35215
1221
1233
  ```
1222
1234
 
1223
1235
  - Option `:name` is the key of the column which came **from key names**.
1236
+ The default value is `:NAME` if it is not specified.
1224
1237
  - Option `:value` is the key of the column which came **from values**.
1238
+ The default value is `:VALUE` if it is not specified.
1225
1239
 
1226
1240
  ```ruby
1227
1241
  import_cars.to_long(:Year, name: :Manufacturer, value: :Num_of_imported)
1228
1242
 
1229
1243
  # =>
1230
- #<RedAmber::DataFrame : 25 x 3 Vectors, 0x0000000000017700>
1244
+ #<RedAmber::DataFrame : 25 x 3 Vectors, 0x000000000001359c>
1231
1245
  Year Manufacturer Num_of_imported
1232
- <uint16> <dictionary> <uint32>
1233
- 1 2017 Audi 28336
1234
- 2 2017 BMW 52527
1235
- 3 2017 BMW_MINI 25427
1236
- 4 2017 Mercedes-Benz 68221
1237
- 5 2017 VW 49040
1246
+ <uint16> <string> <uint32>
1247
+ 0 2017 Audi 28336
1248
+ 1 2017 BMW 52527
1249
+ 2 2017 BMW_MINI 25427
1250
+ 3 2017 Mercedes-Benz 68221
1251
+ 4 2017 VW 49040
1238
1252
  : : : :
1239
- 23 2021 BMW_MINI 18211
1240
- 24 2021 Mercedes-Benz 51722
1241
- 25 2021 VW 35215
1253
+ 22 2021 BMW_MINI 18211
1254
+ 23 2021 Mercedes-Benz 51722
1255
+ 24 2021 VW 35215
1242
1256
  ```
1243
1257
 
1244
1258
  ### `to_wide`
@@ -1246,7 +1260,9 @@ When the option `keep_key: true` used, the column `key` will be preserved.
1246
1260
  Creates a 'wide' (messy) DataFrame from a 'long' DataFrame.
1247
1261
 
1248
1262
  - Option `:name` is the key of the column which will be expanded **to key names**.
1263
+ The default value is `:NAME` if it is not specified.
1249
1264
  - Option `:value` is the key of the column which will be expanded **to values**.
1265
+ The default value is `:VALUE` if it is not specified.
1250
1266
 
1251
1267
  ```ruby
1252
1268
  import_cars.to_long(:Year).to_wide
@@ -1257,13 +1273,11 @@ When the option `keep_key: true` used, the column `key` will be preserved.
1257
1273
  #<RedAmber::DataFrame : 5 x 6 Vectors, 0x000000000000f0f0>
1258
1274
  Year Audi BMW BMW_MINI Mercedes-Benz VW
1259
1275
  <uint16> <uint16> <uint16> <uint16> <uint32> <uint16>
1260
- 1 2017 28336 52527 25427 68221 49040
1261
- 2 2018 26473 50982 25984 67554 51961
1262
- 3 2019 24222 46814 23813 66553 46794
1263
- 4 2020 22304 35712 20196 57041 36576
1264
- 5 2021 22535 35905 18211 51722 35215
1265
-
1266
- # == import_cars
1276
+ 0 2017 28336 52527 25427 68221 49040
1277
+ 1 2018 26473 50982 25984 67554 51961
1278
+ 2 2019 24222 46814 23813 66553 46794
1279
+ 3 2020 22304 35712 20196 57041 36576
1280
+ 4 2021 22535 35905 18211 51722 35215
1267
1281
  ```
1268
1282
 
1269
1283
  ## Combine