我是编程新手,需要指导才能将我的方法转化为代码。
在我的实验室里,我正在做一个时间序列项目,以发现细胞中的哪个基因会在生物体的细胞周期中自然变化。我有一个包含数值的表格数据集(最初为10列,27,000行)。为了分析基因是否在数据集上循环,我将一个时间点(或列)的值除以每个后续时间点(或列),并在数据集(the top section of the picture is an example of spread sheet with numerical value at each time-point. The bottom section is an example of what the time-comparisons looked like across the data中继续这种趋势。
然后,我使用逻辑后面的多个AND / OR标准实施了一个高级过滤器(Source Jeeped)
WHERE (column A >= 2.0 AND column B <= 0.5)
OR (column A >= 2.0 AND column C <= 0.5)
OR (column A >= 2.0 AND column D <= 0.5)
OR (column A >= 2.0 AND column E <= 0.5)
(etc ...) 从那里,我在整个数据集(in the photograph, A on the left -- exanple of the original filter, and B -- the filter sliding across the data)上滑动高级过滤器
过滤器产生了符合我的标准的多张基因。为了计算有多少独特的基因符合这个标准,我合并了所有工作表的A列( gene _ ID's ),并删除了重复项,以产生一个独特基因ID的列表。
由于每个电子表格的大小(过滤前的37列,27000行),这个过程花费了我近3个小时。这个过程可以加快吗?如果是这样的话,有人能给我指出正确的方向,或者帮我创建代码来做到这一点吗?
感谢您的时间,如果您需要任何澄清,请不要客气。
发布于 2016-01-08 02:19:57
在R中有几种方法可以做到这一点,但我认为一种常见的、易于考虑的方法是使用any函数。这基本上需要一系列的逻辑测试,并在它们之间放置一个"OR“,因此如果它们中的任何一个返回true,那么它就返回true。您可以将每一列传递给它,然后将其与and组合,以便对列a进行逻辑测试。可能还有其他方法来抽象这一列,但这应该可以让您开始:
df <- data.frame(
a = 1:100,
b = 1:100,
c = 51:150,
d = 101:200,
value = rep("a", 100)
)
df[ df$a > 2 & any(df$b > 5, df$c > 5, df$d > 5), "value"] <- "Test Passed!"https://stackoverflow.com/questions/34662230
复制相似问题