我必须从数据集的中间找到数据集的最接近的最大值。数据集可能如下所示:
46813471 2
46813481 2
46813491 2
46813501 2
46813511 2
46813521 2
46813531 3
46813541 2
46813551 2
46813561 2
46813571 2
46813581 2
46813591 2
46813601 2
46813611 2
46813621 2
46813631 3
46813641 9
46813651 14
46813661 20
46813671 32
46813681 45
46813691 58
46813701 69
46813711 87
46813721 96
46813731 104
46813741 102
46813751 96
46813761 86
46813771 75
46813781 65
46813791 51
46813801 35
46813811 24
46813821 14
46813831 9
46813841 8
46813851 5
46813861 4
46813871 5
46813881 5
46813891 4
46813901 3
46813911 3
46813921 3
46813931 3
46813941 3
46813951 2
46813961 1
46813991 2
46814001 2
46814011 2
46814021 2
46814031 2
46814041 2
46814051 2
46814061 2
46814071 1
46814091 2
46814101 2
46814111 2
46814121 2
46814131 2
46814141 2
46814151 2
46814161 2
46814171 2
请记住,实际数据集非常大,并且模式会重复。我如何从中间获得最接近的最大值,特定点,例如第1列中的行46813621?我从perl调用R,我可能会传入一个数组,这将有数据,我会指定一个索引。然后,R将从该点获得最大壁橱并返回perl索引和实际最大值。
真正感谢所有帮助。
答案 0 :(得分:1)
据我所知,从turnpoints
库中找到pastecs
函数的最佳方法是找到这样的数据的局部最大值(我假设是一个时间序列)。
library(pastecs)
data <- read.table("Untitled.txt")
tp <- turnpoints(data[,2])
dist_from_middle <- function(x, middle) {
sqrt((x-middle)^2)
}
peaks = extract(tp, pit=0)
distances = sapply(data[,1], dist_from_middle, middle=46813621)
data <- data.frame(data, peak = peaks, distance = distances)
peaks <- data[which(data$peak==1),]
# V1 V2 peak distance
#7 46813531 3 1 90
#27 46813731 104 1 110
#42 46813881 5 1 260
#58 46814061 2 1 440
closest_peak <- peaks[which(peaks$distance==min(peaks$distance)),]
# V1 V2 peak distance
#7 46813531 3 1 90
您的样本数据恰好说明了这种方法的一个缺陷,即有一个微小的局部最大值恰好接近您的参考点。您可以尝试通过指定峰的p值截止值来避免这种情况(p值由turnpoints
生成):
sig_extrema <- data[tp$tppos[which(tp$proba < 0.05)],]
sig_maxima <- sig_extrema[which(sig_extrema$peak==1),]
closest_maxima <- sig_maxima[which(
sig_maxima$distance==min(sig_maxima$distance)),]
# V1 V2 peak distance
#27 46813731 104 1 110
这可能是您希望的数据点..
答案 1 :(得分:0)
正方向上最接近的局部最大值:
wpos <- which( diff( X[ ( length(X)/2 ):length(X) ] ) < 0)[1]
负面方向:
wneg <- which( diff( X[ ( length(X)/2 ):1 ] ) ) < 0)[1]
which.min(wpos, wneg)
高峰发现确实有其缺陷。