r-如何检测和区分数字矢量中的第一次、第二次和第三次增量



假设我有以下向量:

vector <- c(5,5,11,11,7,16,16,16,12,8,20,24,20)

正如我们所看到的,这个向量有4个单独的增长,尽管我们只关心前3个。这3个增加是:从第2个元素到第3个元素(从5个增加到11个,增加了6个(,从第5个元素到6个元素(由7个增加到16个,增加9个(,以及从第10个元素到11个元素(自8个增加到20个,增加12个(。我正在寻找一些关于构建某种for循环算法的帮助,以将这些增长的量存储在单独的变量中。到目前为止,我知道如何检测每一次增长,但我不知道如何区分每一次,以便将其单独存储。任何帮助都将不胜感激!

您可以使用diff()并将结果子集化以查找增量,使用head()取前3个,然后转换为列表进行分离。

dv <- diff(vector)
as.list(head(dv[dv > 0], 3))
[[1]]
[1] 6
[[2]]
[1] 9
[[3]]
[1] 12

另一个选项可以是将向量中的每个值与其之前的值进行比较(使用dplyr包中的lag()函数(,并且只保持正差:

library(dplyr)
vector <- c(5,5,11,11,7,16,16,16,12,8,20,24,20)
# differences between numbers
diffs <- vector - lag(vector)
# only keep the first three positive differences
head(diffs[which(diffs > 0)], 3)
#> [1]  6  9 12

创建于2021-07-23由reprex包(v2.0.0(

最新更新