根据事件过滤数据集

时间:2015-10-09 11:40:53

标签: r

我有一些大型数据集(超过500 000行),我想在R中过滤它。我只想保留最相关的信息,所以我认为保存元素的行是个好主意发生的事件大于某个值。例如,我有这些数据:

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

我想保留A行元素出现次数大于1的行。在这种情况下,输出将为:

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

我知道如何使用for循环和rbind,但由于我使用的数据集非常大,性能受到很大阻碍。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我们可以使用data.tabledplyrbase R方法执行此操作。使用data.table,我们将'data.frame'转换为'data.table'(setDT(df1)),按'A'分组,if nrows大于1,我们得到Data.table的子集(.SD)。

library(data.table)
setDT(df1)[, if(.N>1) .SD, by = A]

或者我们使用dplyr。我们将“A”,filter分组为大于1的小组(n() >1

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

或者使用ave中的base R,我们得到一个逻辑索引并使用它来对数据集进行子集

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

或者,如果不使用任何分组,我们可以使用duplicated来获取索引和子集

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