Class: CArray
- Inherits:
-
Object
- Object
- CArray
- Defined in:
- lib/R.rb,
lib/carray/dataframe/dataframe.rb,
lib/carray/dataframe/dataframe.rb
Class Method Summary collapse
Instance Method Summary collapse
- #as_r ⇒ Object
- #guess_column_type_for_R ⇒ Object
- #save_excel(filename, &block) ⇒ Object
- #value_counts ⇒ Object
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_r ⇒ Object
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_R ⇒ Object
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_counts ⇒ Object
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 |