2015-10-09 74 views
1

我有一些大型數據集(超過500 000行),我想在R中過濾它。我只想保留最相關的信息,所以我認爲這是一個好主意保存其元素出現的值大於某個值的行。例如,我有這樣的數據:基於發生的過濾器數據集

A  B 
2  5 
4  7 
2  8 
3  7 
2  9 
4  2 
1  0 

我想保留一排的,其元素具有發生大於1。在這種情況下,行輸出將是:

A  B 
    2  5 
    4  7 
    2  8 
    2  9 
    4  2 

我知道如何使用for循環和rbind來完成它,但由於我使用的數據集非常大,所以性能受到很大阻礙。有什麼建議?

回答

0

我們可以使用data.table,dplyrbase R方法來做到這一點。通過使用data.table,我們將'data.frame'轉換爲'data.table'(setDT(df1)),按'A'分組,if的nrows大於1,我們得到Data.table的子集(.SD)。我們使用dplyr。我們通過 'A' 組,filter的有NROWS大於1(n() >1

library(dplyr) 
df1 %>% 
    group_by(A) %>% 
    filter(n()>1) 

或者使用avebase R羣體,我們得到一個合理的指標,並用它來子集數據集

df1[with(df1, ave(seq_along(A), A, FUN=length))> 1,] 

或者不使用任何分組,我們可以使用duplicated獲得索引和子集

df1[duplicated(df1$A)|duplicated(df1$A, fromLast=TRUE),]