2016-03-11 23 views
0

我有一個R數據框,由5列和30000行組成。一列,被稱爲「POS」,有這樣一種價值觀按升序排序:在R中,除去同一列中的連續值之間的值的差值超過值的行的行數

pos 

785989 
888659 
918573 
949608 
990417 

我想刪除所有行,在一個「n的「POS」(一個「X」值之間的差異「行),並且」n-1「行中的前值或」n + 1「行中的後值與」x「之間的差值大於100000。例如:在輸入示例中,888659 -785989 = 102670> 100000,因此應刪除包含888659和785989值的行。

感謝您的幫助!

+0

經過排序後的數字像例子中那樣增加實際數據的順序? –

+0

是@PierreLafortune – Lucas

+0

它工作得很好@Pierre Lafortune,但你的腳本只返回值。我想得到一個新的數據框,包括沒有被刪除行的5列。非常感謝 – Lucas

回答

1

一種解決方案是創建一個用戶函數,它的矢量的diff並檢查由所述用戶提供的條件間隙:

diff_set <- function(x, gap) { 
    ind <- c(F, diff(x) > gap) 
    if(sum(ind) == 0) return(!ind) 
    subst <- x[-unique(c(which(ind), which(ind)-1))] 
    x %in% subst 
} 

df1[diff_set(df1$x, 1e5),] 
     x y 
3 918573 C 
4 949608 D 
5 990417 E 

數據

x <- scan(text="785989 
888659 
      918573 
      949608 
      990417") 
df1 <- data.frame(x, y=LETTERS[1:5]) 
相關問題