You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中识别局部极值并生成标记列的实现疑问

问题需求

有一个包含1000+数值的列表(子集如下),需要在R语言的数据框中新增一列,用1标记局部最大值、-1标记局部最小值、0标记非极值点。原代码仅尝试标记最大值,但不确定是否能正确捕获所有极值。

示例数值子集:

c(76.4734833333333, 76.4700041666667, 76.4705916666667, 76.4693, 
76.4679, 76.4675208333333, 76.4666833333333, 76.4655291666667, 
76.46565, 76.4668125, 76.4618416666667, 76.4617666666667, 76.466375, 
76.4636708333333, 76.464325, 76.4638833333333, 76.4633083333333, 
76.4627333333333, 76.4605541666667, 76.4601708333333, 76.4625583333333, 
76.46265, 76.4607833333333, 76.4604730769231, 76.4611833333333, 
76.4607291666667, 76.4613375, 76.4598166666667, 76.4579916666667, 
76.4593, 76.4573291666667, 76.4560208333333, 76.4555958333333, 
76.4544916666667, 76.4549875, 76.45485, 76.4542708333333, 76.4576333333333, 
76.4551708333333, 76.4562208333333, 76.4550291666667, 76.4525125, 
76.45145, 76.4581166666667, 76.4509125, 76.4506875, 76.4480791666667, 
76.4469083333333, 76.446825, 76.4456666666667, 76.4450833333333, 
76.4471166666667, 76.4454583333333, 76.4565958333333, 76.4572708333333, 
76.4527166666667, 76.4499791666667, 76.4462416666667, 76.4470125, 
76.4436833333333, 76.4394083333333, 76.4384083333333, 76.4380416666667, 
76.4420916666667, 76.4388541666667, 76.4417416666667, 76.4382791666667, 
76.4415875, 76.4379041666667, 76.4356916666667, 76.437425, 76.4351666666667, 
76.4323208333333, 76.4308708333333, 76.4279583333333, 76.42345, 
76.4236708333333, 76.4214541666667, 76.4135166666667, 76.4157791666667, 
76.4080083333333, 76.4109583333333, 76.4063458333333, 76.4014958333333, 
76.3932291666667, 76.3864208333333, 76.3806208333333, 76.3771708333333, 
76.3774375, 76.4234958333333, 76.424825, 76.4310833333333, 76.4348666666667, 
76.4300916666667, 76.4245625, 76.4180791666667, 76.4292083333333, 
76.4327583333333, 76.4309416666667, 76.4186708333333, 76.4252375, 
76.4248, 76.4411958333333, 76.4403166666667, 76.449325, 76.4444291666667, 
76.4322291666667, 76.4382, 76.4252083333333, 76.4230583333333, 
76.42185, 76.4090375, 76.4278958333333, 76.4500083333333, 76.4380541666667, 
76.4399125)

原尝试代码:

max <- which(diff(sign(diff(df$mAOD)))==-2)+1
df$max <- ifelse(seq_len(nrow(df)) %in% max, 1, NA)
解决方案

原代码仅处理了局部最大值,且未按需求标记最小值和非极值点,以下是完整实现方案:

1. 构造示例数据框(若已有数据框可跳过此步)

mAOD <- c(76.4734833333333, 76.4700041666667, 76.4705916666667, 76.4693, 
          76.4679, 76.4675208333333, 76.4666833333333, 76.4655291666667, 
          76.46565, 76.4668125, 76.4618416666667, 76.4617666666667, 76.466375, 
          76.4636708333333, 76.464325, 76.4638833333333, 76.4633083333333, 
          76.4627333333333, 76.4605541666667, 76.4601708333333, 76.4625583333333, 
          76.46265, 76.4607833333333, 76.4604730769231, 76.4611833333333, 
          76.4607291666667, 76.4613375, 76.4598166666667, 76.4579916666667, 
          76.4593, 76.4573291666667, 76.4560208333333, 76.4555958333333, 
          76.4544916666667, 76.4549875, 76.45485, 76.4542708333333, 76.4576333333333, 
          76.4551708333333, 76.4562208333333, 76.4550291666667, 76.4525125, 
          76.45145, 76.4581166666667, 76.4509125, 76.4506875, 76.4480791666667, 
          76.4469083333333, 76.446825, 76.4456666666667, 76.4450833333333, 
          76.4471166666667, 76.4454583333333, 76.4565958333333, 76.4572708333333, 
          76.4527166666667, 76.4499791666667, 76.4462416666667, 76.4470125, 
          76.4436833333333, 76.4394083333333, 76.4384083333333, 76.4380416666667, 
          76.4420916666667, 76.4388541666667, 76.4417416666667, 76.4382791666667, 
          76.4415875, 76.4379041666667, 76.4356916666667, 76.437425, 76.4351666666667, 
          76.4323208333333, 76.4308708333333, 76.4279583333333, 76.42345, 
          76.4236708333333, 76.4214541666667, 76.4135166666667, 76.4157791666667, 
          76.4080083333333, 76.4109583333333, 76.4063458333333, 76.4014958333333, 
          76.3932291666667, 76.3864208333333, 76.3806208333333, 76.3771708333333, 
          76.3774375, 76.4234958333333, 76.424825, 76.4310833333333, 76.4348666666667, 
          76.4300916666667, 76.4245625, 76.4180791666667, 76.4292083333333, 
          76.4327583333333, 76.4309416666667, 76.4186708333333, 76.4252375, 
          76.4248, 76.4411958333333, 76.4403166666667, 76.449325, 76.4444291666667, 
          76.4322291666667, 76.4382, 76.4252083333333, 76.4230583333333, 
          76.42185, 76.4090375, 76.4278958333333, 76.4500083333333, 76.4380541666667, 
          76.4399125)
df <- data.frame(mAOD = mAOD)

2. 完整标记极值

# 计算相邻差值的符号变化,捕捉极值特征
diff_sign <- diff(sign(diff(df$mAOD)))

# 定位局部最大值和最小值的位置
local_max_pos <- which(diff_sign == -2) + 1
local_min_pos <- which(diff_sign == 2) + 1

#
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:05:15