我一直在使用SmarterCSV将床格式文件转换为csv文件并更改列名。
现在,我收集了几个CSV文件,并希望将它们合并为一个大CSV文件。
在test3.csv,有三列,chromosome
,start_site
和end_site
将要使用,其他三列,binding_site_pattern
,score
和strand
将被删除。
通过增加三个新列到test3.csv文件,数据都在同一transcription_factor
列:Cmyc
在cell_type
列:PWM
在project_name
列:JASPAR
。
有人对此有任何想法吗?
test1.csv
transcription_factor,cell_type,chromosome,start_site,end_site,project_name
Cmyc,GM12878,11,809296,809827,ENCODE
Cmyc,GM12878,11,6704236,6704683,ENCODE
test2.csv
transcription_factor,cell_type,chromosome,start_site,end_site,project_name
Cmyc,H1ESC,19,9710417,9710587,ENCODE
Cmyc,H1ESC,11,541754,542137,ENCODE
test3.csv
chromosome,start_site,end_site,binding_site_pattern,score,strand
chr1,21942,21953,AAGCACGTGGT,1752,+
chr1,21943,21954,AACCACGTGCT,1335,-
所需的合并结果:
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
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句