如果值不接近最大值,则忽略该值

时间:2014-04-07 14:18:47

标签: r

我使用下面的函数在我的数据的每一行中找到“局部最大值”:

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)& (马库斯,周六)甚至没有接近至少20%的最高值。

是否可以编写这样的功能?

1 个答案:

答案 0 :(得分:1)

这应该这样做(调用您的数据mat

greater <- apply(mat, 1, function(row){
  rowmax <- max(row)
  cutoff <- rowmax * 0.8
  as.numeric(row > cutoff)
})

t(greater)