r - 查找 "local maximas"但忽略小于最高值 20% 的值

标签 r

我正在尝试创建一个函数来在我的数据的每一行中找到“局部最大值”,但如果它们不是连续“最高”最大值的至少 20%,则忽略。

我用来寻找局部最大值的函数:

which(diff(sign(diff(Gene name)))==-2)+1

但我想修改它并仅在其他最大值至少为最高值的 20% 时才设置选择。

这是我的数据:

Name     Mo   Tue   Wen   Thu   Fr   Sat   Sun   
Mark     0     32    53    11    0    33    52   
Ettin    22    51    31    0     0    1      0
Gerard   36    0     13    0    111   33     0   
Marcus   0     44    31    10    0    2      0     

这是我的函数得到的输出:

Name     Mo   Tue   Wen   Thu   Fr   Sat   Sun   
Mark     0     0     1     0     0    0     1   ## Two local maximas
Ettin    0     1     0     0     0    1     0   ## Two local maximas (Should be one!)
Gerard   1     0     1     0     1    0     0   ## Three local maximas (Should be two!)
Marcus   0     1     0     0     0    1     0   ## Two local maximas (Should be one!)

对于 3 行,输出不正确,因为单元格 (Ettin,Sat) & (Gerard, Wen) & (Marcus, Sat) 中的值甚至不接近最高值的至少 20%。

这就是我希望通过新功能获得的:

Name     Mo   Tue   Wen   Thu   Fr   Sat   Sun   
Mark     0     0     1     0     0    0     1   
Ettin    0     1     0     0     0    0     0   
Gerard   1     0     0     0     1    0     0   
Marcus   0     1     0     0     0    0     0  

这样的函数可以写吗?

    if(master[j,i]>master[j,i-1]) {
      if(master[j,i] > 0.2*max(master [j,])) {
        mas_max[j,i] <- 1 ## Setting maxima
        mas_max[j,i-1] <- 0 ## Removing potential maxima before
 }
}

这是我创建的一个循环,但它不是获得预期结果的最佳方式。

最佳答案

如果你的局部最大值在

ind <- which(diff(sign(diff(GeneName)))==-2)+1

然后可以得到不低于最高20%的thresholds的指标

ind[GeneName[ind] >= 0.2 * max(GeneName[ind])]

另外,请注意 ==-2 不会发现属于平台的局部最大值,例如它不会发现 c(0,10,10,0) - 不是确定这是否是一个问题,但我认为最好指出这一点。

关于r - 查找 "local maximas"但忽略小于最高值 20% 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22934249/

相关文章:

r - 如何删除 ggplot2 图中的绘图和轴之间的空间?

r - 在同一图中绘制正态分布和二项分布

R Markdown 输出大小

r - 从字符串中提取数字

r - 为什么:=比`:=`()快?

r - R 中的 SAS 宏变量

r - ggplot 按因子和梯度颜色

r - 不同索引的子集列表

r - 在 R 中,为什么 is.numeric(NaN) 打印 "TRUE"?

r - 使用重叠阈值逐行选择跨列的组合