【发布时间】:2020-01-29 06:30:44
【问题描述】:
我有一个数据,我在我的loc_max 列中获得了由TRUE 值指定的局部最大值。我想根据这些条件从我的局部最大值中识别“真正的最大值”:1.)局部最大值之前的 5 个值必须至少有 3 个正的一阶导数; AND 2.) 随后的 5 个值必须至少有 3 个负一阶导数。这是我的示例数据框:
val <- c(0.06796823, 0.12165540, 0.17685980, 0.28518490, 0.36616820,
0.40935790, 0.45418170, 0.48220730, 0.45214280, 0.40290130,
0.38103100, 0.39525690, 0.40527800, 0.48172680, 0.54250300,
0.56136270, 0.53755350, 0.57047540, 0.55738850, 0.50470080,
0.47487730, 0.45653140, 0.45670750, 0.43722310, 0.42154800,
0.41154490, 0.38138090, 0.41802160, 0.42043370, 0.39982040,
0.35258890, 0.32990900, 0.28508770, 0.23949280, 0.19405640,
0.16321880, 0.17098540, 0.17572110, 0.17464730, 0.17670690,
0.16105620, 0.18609890, 0.19083090, 0.19506300, 0.16865580,
0.15830920)
loc_max <- c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE,
FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE,
FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE,
FALSE)
df <- data.frame(val, loc_max)
我应该改变一个包含布尔值的新列,其中我确定的“真正的最大值”将是 TRUE,其余的将是 FALSE。在此先感谢您的帮助。
生成的数据框应如下所示:
val loc_max true_max
1 0.06796823 FALSE FALSE
2 0.12165540 FALSE FALSE
3 0.17685980 FALSE FALSE
4 0.28518490 FALSE FALSE
5 0.36616820 FALSE FALSE
6 0.40935790 FALSE FALSE
7 0.45418170 FALSE FALSE
8 0.48220730 TRUE TRUE
9 0.45214280 FALSE FALSE
10 0.40290130 FALSE FALSE
11 0.38103100 FALSE FALSE
12 0.39525690 FALSE FALSE
13 0.40527800 FALSE FALSE
14 0.48172680 FALSE FALSE
15 0.54250300 FALSE FALSE
16 0.56136270 TRUE FALSE
17 0.53755350 FALSE FALSE
18 0.57047540 TRUE TRUE
19 0.55738850 FALSE FALSE
20 0.50470080 FALSE FALSE
21 0.47487730 FALSE FALSE
22 0.45653140 FALSE FALSE
23 0.45670750 TRUE FALSE
24 0.43722310 FALSE FALSE
25 0.42154800 FALSE FALSE
26 0.41154490 FALSE FALSE
27 0.38138090 FALSE FALSE
28 0.41802160 FALSE FALSE
29 0.42043370 TRUE FALSE
30 0.39982040 FALSE FALSE
31 0.35258890 FALSE FALSE
32 0.32990900 FALSE FALSE
33 0.28508770 FALSE FALSE
34 0.23949280 FALSE FALSE
35 0.19405640 FALSE FALSE
36 0.16321880 FALSE FALSE
37 0.17098540 FALSE FALSE
38 0.17572110 TRUE FALSE
39 0.17464730 FALSE FALSE
40 0.17670690 TRUE FALSE
41 0.16105620 FALSE FALSE
42 0.18609890 FALSE FALSE
43 0.19083090 FALSE FALSE
44 0.19506300 TRUE FALSE
45 0.16865580 FALSE FALSE
46 0.15830920 FALSE FALSE
【问题讨论】:
-
你的意思是both前面的5个值和后面的5个值应该至少包含3个
FALSE值每个i> 前面和后面的?或者是:有一个TRUE,并从那个(总共5个)中给或取2个向量元素,应该至少有3个FALSE? -
你只是在寻找
replace(logical(nrow(df)), which.max(df$val), TRUE)? -
@chinsoon12 不。这只给出最大值。
-
3 positive first derivative;和3 negative first derivative.是什么意思? -
我发布的解决方案与@chinsoon12 的评论相符。