我在 R 中有一个时间序列
例如
[1] 0.2 0.6 0.4 -0.2 -0.1 0.3 0.8 0.7
我怎样才能找出这个系列中最大的变化?(从第 4 点到第 7 点最大的变化 =1)我怎样才能找出例如 1 的变化是什么?(再次从 4 (= -0.2) 到 7 (= 0,8)
我在 R 中有一个时间序列
例如
[1] 0.2 0.6 0.4 -0.2 -0.1 0.3 0.8 0.7
我怎样才能找出这个系列中最大的变化?(从第 4 点到第 7 点最大的变化 =1)我怎样才能找出例如 1 的变化是什么?(再次从 4 (= -0.2) 到 7 (= 0,8)
要计算一组点的距离矩阵,可以使用该dist
函数。之后,只需选择它们之间距离最大的点对即可。在代码中:
m = as.matrix(dist(runif(10)))
m == max(m)
1 2 3 4 5 6 7 8 9 10
1 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
2 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
3 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
4 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
5 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
6 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
7 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
8 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
9 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
10 FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
which(m == max(m), arr.ind = TRUE)[1,]
row col
10 6
你可以expand.grid
在这里使用。
exg <- expand.grid(x, x)
exg[apply(exg, 1, diff) == VALUE.TO.FIND, ] # notice the ', ' (comma-and-space)
Var1 Var2
52 -0.2 0.8
VALUE.TO.FIND
您要搜索的具体价值在哪里
相反,如果您想找到最大距离:
dist <- apply(exg, 1, diff)
exg[dist == max(dist), ]
要获得列表中最大的变化,只需遍历它并获取最大值和最小值。然后比较它们。它在 O(n) 时间内。这很简单。
找到某个变化有点复杂。不知道你为什么想要它,但它仍然是可能的。一种方法是使用列表的开始索引和结束索引的每个组合调用您刚刚编写的第一个函数。这在计算上有点复杂,但它是实现它的最简单方法。然后当你得到从位置 1 到 2 的变化时,你可以检查它是否是你想要的,如果不是,1-3。最终你会到达 n-1 到 n,如果这不是你要找的变化,那么它不在集合中。此方法将在 O(n^2) 中。