2016-08-01 17 views
1

以下是我的數據,GROUP BY,採取統計和篩選出相應的數項大於1

data 

date    number  value 
2016-05-05   1   5 
2016-05-05   1   6 
2016-05-06   2   7 
2016-05-06   2   8 
2016-05-07   3   9 
2016-05-08   4   10 
2016-05-09   5   11 

當我使用下面的命令,

data %>% groupby(date, number) %>% summarize(count = n()) 

我得到如下,

date    number  count 
2016-05-05   1    2 
2016-05-06   2    2 
2016-05-07   3    1 
2016-05-08   4    1 
2016-05-09   5    1 

現在我想篩選出大於1的計數對應的條目。我想要刪除組合對象其具有里斯計數大於1。我的輸出應該像下面,

data 

date    number  value 
2016-05-07   3   9 
2016-05-08   4   10 
2016-05-09   5   11 

其中第一四個條目,因爲它具有計數大於1,已被過濾掉。有人能幫我做這件事嗎?或者給出一些相關的想法?

+0

不,這兩個問題都是關於occurence篩選提供了一些替代品。 – Jaap

+1

@akrun對一個新數據重新關閉'data [!data [,duplicated(.SD)|重複(.SD,fromLast = TRUE),.SDcols = date:number]]'似乎在這裏工作正常。 – Frank

回答

3

我們可以在'date','number'分組後使用filter,並檢查行數(n())是否等於1,並使用filter命令保留這些行。

library(dplyr) 
data %>% 
    group_by(date, number) %>% 
    filter(n() ==1) 
#  date number value 
#  <chr> <int> <int> 
#1 2016-05-07  3  9 
#2 2016-05-08  4 10 
#3 2016-05-09  5 11 

只是爲了使用data.table

library(data.table) 
setDT(data)[, if(.N == 1) .SD , .(date, number)] 

或用base R

data[with(data, ave(number, number, date, FUN = length) ==1),]