【发布时间】:2019-07-17 12:37:14
【问题描述】:
我正在使用 R 分析一些光谱,并试图获得局部最大值,即它们的位置和值。
例如,使用向量:
spectrum <- c(1,1,2,3,5,3,3,2,1,1,5,6,9,5,1,1)
我想要以下结果:
pos.peaks = c(5,13)
val.peaks = c(5,9)
我已经使用了此处提供的解决方案:Finding local maxima and minima 用于峰的位置,但是之后如何提取相应的值?知道我不只有一个向量,我在一个列表的几个数据帧中有几列,我想将该函数应用于列表中所有数据帧的每一列。例如,对于我所做的所有职位:
example <- lapply(mylist, function (x) lapply(x, function(y) which(diff(sign(diff(y)))==-2)+1))
我没有设法让它与切片或过滤器一起使用,因为我不需要同一数据帧中的相同行...
此外,我想知道如何减少我得到的局部最大值的数量,因为我的数据非常嘈杂。
如果您能给我任何帮助,我将不胜感激。
谢谢!
纳特
【问题讨论】:
-
只需使用位置对数据进行子集化以获取值
-
你可以使用
spectrum[which(diff(sign(diff(spectrum))) == - 2) + 1]。