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

Mic*_*ael 3 ruby csv smartercsv

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

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

在test3.csv,有三列,chromosomestart_siteend_site将要使用,其他三列,binding_site_patternscorestrand将被删除。

通过向 test3.csv 文件中添加三个新列,列中的数据全部相同transcription_factorCmyccell_type列中:PWMproject_name列中:JASPAR

有没有人对此有任何想法?

测试1.csv

transcription_factor,cell_type,chromosome,start_site,end_site,project_name
Cmyc,GM12878,11,809296,809827,ENCODE  
Cmyc,GM12878,11,6704236,6704683,ENCODE  
Run Code Online (Sandbox Code Playgroud)

测试2.csv

transcription_factor,cell_type,chromosome,start_site,end_site,project_name  
Cmyc,H1ESC,19,9710417,9710587,ENCODE  
Cmyc,H1ESC,11,541754,542137,ENCODE  
Run Code Online (Sandbox Code Playgroud)

测试3.csv

chromosome,start_site,end_site,binding_site_pattern,score,strand  
chr1,21942,21953,AAGCACGTGGT,1752,+    
chr1,21943,21954,AACCACGTGCT,1335,-  
Run Code Online (Sandbox Code Playgroud)

期望的组合结果:

transcription_factor,cell_type,chromosome,start_site,end_site,project_name
Cmyc,GM12878,11,809296,809827,ENCODE  
Cmyc,GM12878,11,6704236,6704683,ENCODE  
Cmyc,H1ESC,19,9710417,9710587,ENCODE    
Cmyc,H1ESC,11,541754,542137,ENCODE   
Cmyc,PWM,1,21942,21953,JASPAR  
Cmyc,PWM,1,21943,21954,JASPAR
Run Code Online (Sandbox Code Playgroud)

Jac*_*own 7

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
Run Code Online (Sandbox Code Playgroud)