Обработка TSV с помощью Ruby

У меня есть файл TSV следующим образом. (Ну, это сохранено как csv). Он был создан путем запуска вставки в 2 файла и сохранения вывода в другом файле. Поэтому столбцы фактически разделены вкладками.

Это эта файловая структура

Quantity1 Value1 Value2 Value3 ...Valuen
Quantity2 Value1 Value2 Value3 ...ValueN
....
....
Quantityn Value1 Value2 Value3 ...Valuen

Я хочу добавить еще 3 столбца в файл, который будет печатать минимальный, максимальный и 90-й процентиль каждой строки в 3 столбцах в конце.

Поскольку файлы были созданы скриптом Ruby, я решил, что они также должны обрабатываться скриптом ruby.


person Srini    schedule 11.11.2014    source источник


Ответы (1)


Вам нужно будет прочитать файл, добавить необходимые столбцы для каждой строки и написать его снова, примерно так:

CSV.open('path_to_new_file.csv', 'wb', col_sep: "\t") do |new_csv|
  CSV.foreach('path_to_src_file.csv', col_sep: "\t") do |row|
    sorted_values = row[1..-1].sort
    min = sorted_values.first
    max = sorted_values.last
    ninetieth_percentile = sorted_values[(sorted_values.length * 0.9).floor]
    new_csv << row + [min, max, ninetieth_percentile]
  end
end

Дополнительные сведения об обработке CSV-файлов в ruby ​​см. здесь

person Uri Agassi    schedule 11.11.2014
comment
На самом деле, не должен ли девятый процентиль быть ninetieth_percentile = sorted_values[((sorted_values.length * 0.9).ceil)-1], потому что индексы отсортированных значений начинаются с 0, а не с 1? - person Srini; 11.11.2014
comment
@SrinivasSuresh - я думаю, ты прав. Я изменил его с .ceil на .floor... - person Uri Agassi; 11.11.2014