我在R
中有一个时间序列e.g。
[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)
答案 0 :(得分:2)
要计算一组点的距离矩阵,可以使用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
答案 1 :(得分:1)
您可以在此处使用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), ]
答案 2 :(得分:0)
要获得列表中的最大变化,只需迭代它并获取最大值和最小值。然后比较它们。这是在O(n)时间。这很简单。
要找到某种变化会更复杂一些。不知道为什么你想要它,但它仍然是可能的。一种方法是使用列表的起始索引和结束索引的每个组合调用刚刚编写的第一个函数。这在计算上更复杂,但它是实现它的最简单方法。然后当你从位置1变为2时,你可以检查它是否是你想要的,如果没有,1-3。最终你会得到n-1到n,如果那不是你想要的改变,那么它就不在集合中。 该方法将在O(n ^ 2)中。