如何使用Ruby将多个CSV文件合并为一个大的CSV文件?

时间:2014-07-24 16:04:17

标签: ruby csv smartercsv

我一直在使用SmarterCSV将床格式文件转换为csv文件并更改列名。

现在我收集了几个CSV文件,并希望将它们组合成一个大的CSV文件。

在test3.csv中,有三列,chromosomestart_siteend_site将被使用,其他三列binding_site_pattern,{{1将被删除的{}和score

通过在test3.csv文件中添加三个新列,strandtranscription_factor列中的数据完全相同:Cmyc列:cell_type ,在PWM列中:project_name

任何人对此都有任何想法吗?

test1.csv

JASPAR

test2.csv

transcription_factor,cell_type,chromosome,start_site,end_site,project_name
Cmyc,GM12878,11,809296,809827,ENCODE  
Cmyc,GM12878,11,6704236,6704683,ENCODE  

test3.csv

transcription_factor,cell_type,chromosome,start_site,end_site,project_name  
Cmyc,H1ESC,19,9710417,9710587,ENCODE  
Cmyc,H1ESC,11,541754,542137,ENCODE  

期望的综合结果:

chromosome,start_site,end_site,binding_site_pattern,score,strand  
chr1,21942,21953,AAGCACGTGGT,1752,+    
chr1,21943,21954,AACCACGTGCT,1335,-  

1 个答案:

答案 0 :(得分:3)

hs = %w{ transcription_factor cell_type chromosome start_site end_site project_name }

CSV.open('result.csv','w') do |csv|
  csv << hs
  CSV.foreach('test1.csv', headers: true) {|row| csv << row.values_at(*hs) }
  CSV.foreach('test2.csv', headers: true) {|row| csv << row.values_at(*hs) }
  CSV.foreach('test3.csv', headers: true) do |row|
    csv << ['Cmyc', 'PWM', row['chromosome'].match(/\d+/).to_s] + row.values_at('start_site', 'end_site') + ['JASPAR']
  end
end