在Ruby中比较多个值

在Ruby中比较多个值,ruby,bioinformatics,Ruby,Bioinformatics,找到文件中每个基因最长转录本的最佳方法是什么 我有一个包含以下内容的文件: Gene Transcript Transcript's size NONDMEG000107 NONDMET000231 329 NONDMEG000107 NONDMET000234 21 NONDMEG000107 NONDMET000235 131 NONDMEG000107 NONHSAT000018 283 NONHSAG000008 NON

找到文件中每个基因最长转录本的最佳方法是什么

我有一个包含以下内容的文件:

Gene            Transcript      Transcript's size
NONDMEG000107   NONDMET000231   329
NONDMEG000107   NONDMET000234   21
NONDMEG000107   NONDMET000235   131
NONDMEG000107   NONHSAT000018   283
NONHSAG000008   NONHSAT000019   322
NONHSAG000008   NONHSAT000020   1300
NONHSAG000008   NONHSAT000021   971
NONHSAG000008   NONHSAT000022   277
NONHSAG000008   NONHSAT000043   335
NONHSAG000008   NONHSAT000044   179
输出应为:

NONDMEG000107   NONDMET000231   329    
NONHSAG000008   NONHSAT000020   1300

不清楚其中有哪些数据类型,但假设每个条目都是gen(string)、transcript(string)和size(integer)的数组:


您可以将该文件读取为
CSV
,然后检查每一行并找出哪个基因具有最大的转录大小。输入文件中需要进行一项更改,标题应为

Gene            Transcript      Transcript_size
以下是代码:

require "csv"
require "pp"
hash = {}
CSV.foreach("/path/to/gene_data_file", :col_sep => " ", :headers => :first_row) do |row|
    hash[row["Gene"]] = {} if not hash[row["Gene"]]
    hash[row["Gene"]]["Transcript"] = "" if not hash[row["Gene"]]["Transcript"]
    hash[row["Gene"]]["Transcript_size"] = 0 if not hash[row["Gene"]]["Transcript_size"]

    if row["Transcript_size"].to_i > hash[row["Gene"]]["Transcript_size"]
        hash[row["Gene"]]["Transcript"] = row["Transcript"]
        hash[row["Gene"]]["Transcript_size"] = row["Transcript_size"].to_i
    end
end
pp hash
#=> {"NONDMEG000107"=>{"Transcript"=>"NONDMET000231", "Transcript_size"=>329},
#    "NONHSAG000008"=>{"Transcript"=>"NONHSAT000020", "Transcript_size"=>1300}}

发布输入,而不是输入的截图,并跟踪最大的数据。基因在哪里?你是说弦吗?它们和弦有什么不同吗?解释什么是成绩单。这不是一个生物社区。@Adriancar你提到的评论是非常重要的。在生物信息学中,了解细节是至关重要的。想想密码子等等。
require "csv"
require "pp"
hash = {}
CSV.foreach("/path/to/gene_data_file", :col_sep => " ", :headers => :first_row) do |row|
    hash[row["Gene"]] = {} if not hash[row["Gene"]]
    hash[row["Gene"]]["Transcript"] = "" if not hash[row["Gene"]]["Transcript"]
    hash[row["Gene"]]["Transcript_size"] = 0 if not hash[row["Gene"]]["Transcript_size"]

    if row["Transcript_size"].to_i > hash[row["Gene"]]["Transcript_size"]
        hash[row["Gene"]]["Transcript"] = row["Transcript"]
        hash[row["Gene"]]["Transcript_size"] = row["Transcript_size"].to_i
    end
end
pp hash
#=> {"NONDMEG000107"=>{"Transcript"=>"NONDMET000231", "Transcript_size"=>329},
#    "NONHSAG000008"=>{"Transcript"=>"NONHSAT000020", "Transcript_size"=>1300}}