问题的两个部分:查找索引编号
Q1
说我有这样的载体:以
y1 <- c(1:4,3,4:7,5,8:15)
y1
[1] 1 2 3 4 3 4 5 6 7 5 8 9 10 11 12 13 14 15
我想从这个向量中提取一个连续数字的向量,从最小的数字开始。对于y1
这里我期待这样的:
y_result=1:15
y_result
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
我想使用is.unsorted()
但到目前为止,我的技能是失败了我。这是我迄今的尝试。子集向量:
while (is.unsorted(y1) == TRUE) {
y1 <- y1[which(diff(y1) > 0)]
}
y1
[1] 1 2 3 4 5 5 8 9 10 11 12 13
这确实的确产生了一个未排序的向量。然而,那令人讨厌的五人正在造成各种各样的破坏。我看到我的diff()
方法是如何解决问题的,但我不知道如何纠正它。为了清楚起见,我想提取连续的数字,放下任何不符合要求的数字。
对于上述提取,如何将一个提取原始数据而不是原始值的索引值。所以,在这个例子中,我一直在寻找的回报:
>extract_function()
1,2,3,4,7,8,9,11,12,13,14,15,16,17,18
的这里的想法是,我可以使用这些索引数字从原来的数据帧或向量中提取数据。我无法使用match
或%in%
,因为它会返回多个条件匹配的情况。在下面的例子中,讨厌的5个重新出现因为y2
比赛5〜5二者在df1$y1
:
df1=data.frame(y1=c(1:4,3,4:7,5,8:15), res=rnorm(y1))
y2=df1$y1
while (is.unsorted(y2, strictly=TRUE) == TRUE) {
y2 <- y2[which(diff(y2) > 0)]
}
df1[df1$y1 %in% y2,]
y1 res
1 1 -0.24592395
2 2 -1.23183844
3 3 0.39394734
4 4 0.53695526
5 3 -1.76993425
6 4 0.14429303
7 5 -0.01816061
10 5 -0.83691178
11 8 0.27537953
12 9 -0.61817703
13 10 -2.17678870
14 11 -0.74117904
15 12 -0.70320352
难道不是'Q1基本上和你以前的问题一样:[向量中最长有序部分的第一个索引](http://stackoverflow.com/questions/42077448/first-index-of-longest-ordered-portion-of-a -向量) (有一个很好的接受答案)? – Henrik
类似的答案,但对于某些应用程序来说,这种方法过于激进。我还需要一个可以删除小块非增长数据的选项。虽然找到了以前的答案,但是非常全面。 – boshek