Class: CArray

Inherits:
Object
  • Object
show all
Defined in:
lib/R.rb,
lib/carray/dataframe/dataframe.rb,
lib/carray/dataframe/dataframe.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.load_excel(filename, sheet = 0) ⇒ Object



1564
1565
1566
1567
1568
# File 'lib/carray/dataframe/dataframe.rb', line 1564

def self.load_excel (filename, sheet=0)
  book = Spreadsheet.open(filename)
  sheet = book.worksheet(sheet)
  return sheet.map(&:to_a).to_ca
end

Instance Method Details

#as_rObject



260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
# File 'lib/R.rb', line 260

def as_r
  if has_mask?
    case guess_column_type_for_R
    when "integer"
      out = unmask_copy(R.NA_integer_)
    when "numeric"
      out = unmask_copy(R.NA_real_)
    else
      out = unmask_copy(R.NA_character_)
    end
else
	out = self
  end
 if rank == 1
    return out.to_a
  elsif rank == 2
	begin
    mode = RSRuby.get_default_mode
     RSRuby.set_default_mode(RSRuby::NO_CONVERSION)
     return R.matrix(out.flatten.to_a, :nrow=>dim0)
   ensure
     RSRuby.set_default_mode(mode)
   end
else
	return out.to_a
end
end

#guess_column_type_for_RObject



237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
# File 'lib/R.rb', line 237

def guess_column_type_for_R 
  if is_a?(CArray)
    if integer?
      "integer"
    elsif float?
      "numeric"
    elsif object?
      notmasked = self[:is_not_masked].to_ca
      if notmasked.convert(:boolean){|v| v.is_a?(Integer) }.all_equal?(1)
        "integer"
      elsif notmasked.convert(:boolean){|v| v.is_a?(Numeric) }.all_equal?(1)
        "numeric"
      elsif notmasked.convert(:boolean){|v| v.is_a?(String) }.all_equal?(1)
        "character"
      else
        "unknown"
      end
    end
  else
    raise "invalid column name"
  end
end

#save_excel(filename, &block) ⇒ Object



1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
# File 'lib/carray/dataframe/dataframe.rb', line 1549

def save_excel (filename, &block)
  if self.rank >= 3
    raise "too large rank (>2) to write excel file"
  end
  book = Spreadsheet::Workbook.new
  worksheet = book.create_worksheet
  self.dim0.times do |i|
    worksheet.row(i).push *self[i,nil]
  end
  if block
    block.call(worksheet)
  end
  book.write(filename)    
end

#value_countsObject



1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
# File 'lib/carray/dataframe/dataframe.rb', line 1488

def value_counts
  hash = {}
  values = uniq
  values.each do |value|
    hash[value] = 0
  end
  each do |value|
    hash[value] += 1      
  end
  counts = values.convert{|value| hash[value]}
  return CADataFrame.new({'value' => values, 'count' => counts})
end