2017-10-15 34 views
0

我創建了一個數據表df具有相同的價值分組數據表出現兩次以上

library(data.table) 
df <- data.table(id = c(1,1,1,2,2,3), starts = c(0,0,6,0,9,0), ends = c(0,6,10,9,20,7)) 

    #id starts ends 
#1: 1  0 0 
#2: 1  0 6 
#3: 1  6 10 
#4: 2  0 9 
#5: 2  9 20 
#6: 3  0 7 

我只想與同樣id留行顯示的兩倍以上。在這種情況下,id == 3將被省略。

預期的結果:

# id starts ends 
#1: 1  0 0 
#2: 1  0 6 
#3: 1  6 10 
#4: 2  0 9 
#5: 2  9 20 

回答

2

的「身份證」分組後,無論是使用if條件檢查行大於1的數,然後得到的data.table

df[, if(.N > 1) .SD, id] 
子集

或者,我們可以直接從邏輯索引

df[, .SD[.N >1], id] 

或者使用子集這將是快速

df[df[, .I[.N >1], id]$V1] 

或者另一種選擇行索引duplicated也可以工作在這個例子中

df[duplicated(id)|duplicated(id, fromLast = TRUE)] 
+0

感謝。如果我有兩個標準怎麼辦?如同樣的'id'超過2或'ends == 20。 – Harold

+0

@HongruLiu在這種情況下,'.N> 1&.N <21' – akrun

+0

'ends'是另一列,而不是'id'。 – Harold

相關問題