2015-10-09 46 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),]