我使用下面的函数在我的数据的每一行中找到“局部最大值”:
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%的最高值。
是否可以编写这样的功能?
答案 0 :(得分:1)
这应该这样做(调用您的数据mat
)
greater <- apply(mat, 1, function(row){
rowmax <- max(row)
cutoff <- rowmax * 0.8
as.numeric(row > cutoff)
})
t(greater)