我一直在使用SmarterCSV将床格式文件转换为csv文件并更改列名。
现在我收集了几个CSV文件,并希望将它们组合成一个大的CSV文件。
在test3.csv中,有三列,chromosome
,start_site
和end_site
将被使用,其他三列binding_site_pattern
,{{1将被删除的{}和score
。
通过在test3.csv文件中添加三个新列,strand
列transcription_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,-
答案 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