2017-10-05 118 views
-4

我有一個數字序列,我想要檢查並拒絕不會以相似級別增加的數字。拒絕數字序列中的數字不會增加相同的增加

data <- c(1, 2, 5, 6, 6.25, 6.49, 6.75, 7.01, 8, 9, 11) 

例如,對於這裏的數據我想,同比增長0.25 +/- 0.1到子集數,並拒絕那些不遵循這個規則的數字。在這種情況下,子邊界序列將是(6,6.25,6.49,6.75,7.01)。

+2

歡迎SO。本網站不是代碼編寫服務,不適用於提供完整的解決方案。預計用戶將展示一些努力和代碼,而SO在此期間將幫助您解決具體的編程問題。你有沒有嘗試過任何東西?請閱讀:https://stackoverflow.com/help/asking –

回答

-1

這是一個難看的方法來抓住你想要保留的索引。更改0.35如果你有興趣在不同的臨界值

myfun <- function(D) { 
      index <- unique(c(which(abs(diff(D)) < 0.35), which(abs(diff(D)) < 0.35)+1)) 
      return(sort(index)) 
     } 

調用函數來獲得你想要的答案與

data[myfun(data)] 
# [1] 6.00 6.25 6.49 6.75 7.01 

另一個測試

test <- c(1, 1.25, 2, 2.25, 3, 4.5, 4.75, 5, 5.45, 5.65) 
test[myfun(test)] 
# [1] 1.00 1.25 2.00 2.25 4.50 4.75 5.00 5.45 
+0

您可以通過將'which(dplyr :: lag(abs(diff(D))<0.35,1))'替換爲''來移除'dplyr'依賴(abs(diff(D))<0.35)+ 1'。 「滯後」本質上只是給TRUE指數增加了一個。 – Gregor

+0

我確實提到它很醜 – CPak