【发布时间】:2016-07-13 10:45:01
【问题描述】:
所以我还是 R 的新手,我一直在寻找如何根据多个约束和计算过滤数据帧,以便它返回一个新的数据帧。我环顾四周,我知道如何使用%in% 进行过滤,并且我已经使用过很多次了,但是我正在寻找一些关于过滤数据集的建议,使其超出可以使用该语法的一两个约束。
我有一个包含 78,812 行的数据框。在PeakName 列中,我的标识符指向我的数据中的“峰值”。只有 13,000 个峰值,因此每个峰值通常在数据框中出现几次。对于每个唯一的 PeakName,有多个 motifs 与它们相关联的不同 PValue 分数。每个主题还有一个start 和一个stop 位置。
我的目标是创建一个新的数据框,其中:
- 对于每个
PeakName,我找到具有最低PValue的motif并将其添加到新数据帧中 - 使用图案的
start和stop位置,我发现是否有任何图案与刚刚添加到新数据框中的图案重叠。如果有,我会删除这些作为添加到新数据框的可能性。 - 如果此
PeakName有任何剩余motifs,我返回步骤1,并重复此过程直到没有更多可能的motifs。 - 注意:如果有两个等于
PValue的峰,而这个值是当前的最低值,我会选择“主要”主题之一,而不是“次要”主题之一。
示例(简化)数据:
Motif Start Stop PValue PeakName
Primary 4 10 5 Peak1
Primary 5 11 4 Peak1
Secondary 12 18 8 Peak1
Secondary 8 16 6 Peak1
Primary 12 18 9 Peak1
Secondary 3 9 7 Peak2
Primary 5 11 7 Peak2
上述数据的期望输出:
Motif Start Stop PValue PeakName
Primary 5 11 4 Peak1
Secondary 12 18 8 Peak1
Primary 5 11 7 Peak2
任何建议都将不胜感激,因为我一直对如何编写一些东西来做到这一点感到困惑,我认为这是一项相当简单的任务,但一直在逃避我。谢谢!
【问题讨论】:
-
我认为您没有在头脑中解释允许您产生该输出的规则。我们是否应该对主要和次要主题赋予不同的权重?为什么
Secondary 3 9 7 Peak2不符合收录条件?为什么选择了第一个重叠(第 1 行和第 2 行)中的第二行,但选择了第二个重叠(第 3 行和第 4 行)的第一行。编程需要的不仅仅是理解语法。最关键的是,它需要清晰、明确的问题描述。 -
Secondary 3 9 7 Peak2不符合规则(4)的包含条件,因为它与 Peak2 中的 Primary 主题具有相同的 PValue,但在这种情况下,我会将优先级放在 Primary 而不是次要的。选择第二行是因为所有的 Peak1 PValues,它是最低的。该行首先由第二行中存在的最小 PValue 选择。这与第一行、第四行和第五行重叠,这就是为什么这些行未包含在最终输出中的原因。抱歉,我认为我的解释比看起来更清楚
标签: r dataframe subset min overlap