問題的兩個部分:查找索引編號
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