【问题标题】:Order based on inheritance in RR中基于继承的顺序
【发布时间】:2021-10-29 00:52:58
【问题描述】:

我有一个关于本体的信息数据框,如下例所示:

onto<- data.frame(entity = c('disease', 'neurologic disease', 'heart disease', 'lung disease', 'kidney disease', 'gastrointestinal disease', 'seizure', 'iatrogenic seizure', 'cardiomyopathy', 'hypertrophic cardiomyopathy', 'restrictive cardiomyopathy', 'kidney stone', 'glomerulonephritis', 'proliferative gn', 'nonproliferative gn', 'rpgn', 'vasculitic rpgn', 'good pasture', 'wegeners', 'diarrhea', 'asthma', 'pneumonia'), superclass = c('owl:thing', 'disease', 'disease', 'disease', 'disease', 'disease', 'neurologic disease', 'seizure', 'heart disease', 'cardiomyopathy', 'cardiomyopathy', 'kidney disease', 'kidney disease', 'glomerulonephritis', 'glomerulonephritis', 'proliferative gn', 'rpgn', 'rpgn', 'vasculitic rpgn', 'gastrointestinal disease', 'lung disease', 'lung disease'))


我需要根据以下条件对这些实体(数据框行)进行排序:

A.对于第一级,我不想要字母顺序。相反,我想自己确定订单。例如,我希望按以下顺序显示疾病列表:1-“神经系统疾病”,2-“心脏病”,3-“肾病”,4-“肺病”,5-“胃肠道疾病”

B.对于其他级别,我只希望根据继承对实体进行排序: 例如:'proliferative gn'>>'rpgn'>>'vasculitic rpgn'>>'good pasture'>>'wegeners'(当然并不总是这么简单) p>

注意:B 项对我来说更重要。

感谢您对此提供的任何帮助。

【问题讨论】:

  • 你能解释一下,这里的级别是什么意思?就像你提到的第一级和其他级别一样。前 5 个将始终保持在顶部,其他的将按顺序排在它们之后?
  • 我的意思是疾病是第一级...神经系统疾病和心脏疾病以及疾病的所有直接子类都是第二级..上述所有直接子类都是第三级等等.. .
  • 了解因素。将您的列设置为您自己的顺序的因素,然后它将相应地排序。
  • @zx8754 这将是一项艰巨的任务......我希望它们按超类排序。在其下方的行中包含每个实体的子类。
  • @Shibaprasadb 你可以在这里看到我所说的水平 [researchgate.net/figure/… 如果这是我的本体,我希望行如下特征......感觉......积极感觉......温和。 ..微笑..温和...强烈..快乐...自豪...强烈...负面感觉

标签: r dataframe sorting ontology


【解决方案1】:

您的继承规则暗示的是一个有向图,为行提供部分顺序。要将它们放在一致的顺序中,您需要所谓的“拓扑排序”(请参阅​​https://en.wikipedia.org/wiki/Topological_sort)。 R 包中有几个函数可以做到这一点。我没有用过它们,所以我不知道哪个最好/最简单:igraph::topo_sort()Rfast::topological_sort()ggm::topSort()HEMDAG::lexicographical.topological.sort().

我怀疑它们之间的最大区别在于您如何操作数据以产生适当的输入。

我发现有点不清楚您的规则 A 和 B 之间的关系应该是什么。也许就像在您的部分订单中添加一些类似 'neurologic disease &lt; 'heart disease' &lt; 'kidney disease' &lt; 'lung disease' &lt; 'gastrointestinal disease' 的关系一样简单。 (或者也许我有向后的方向。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    相关资源
    最近更新 更多