R 基于事件的过滤数据集
我有一些大型数据集(超过500000行),我想在R中对其进行过滤。我只想保留最相关的信息,因此我认为保存元素出现次数大于某个值的行是一个好主意。例如,我有以下数据:R 基于事件的过滤数据集,r,R,我有一些大型数据集(超过500000行),我想在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
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,但由于我使用的数据集非常大,因此性能受到了极大的阻碍。有什么建议吗?我们可以使用
data.table
、dplyr
或base R
方法来实现这一点。通过使用data.table
,我们将'data.frame'转换为'data.table'(setDT(df1)
),按'A'分组,如果nrow大于1,我们得到data.table的子集(.SD
)
或者我们使用dplyr
。我们按“A”分组,filter
nrows大于1的组(n()>1
)
或者使用base R
中的ave
,我们得到一个逻辑索引,并使用该索引对数据集进行子集划分
df1[with(df1, ave(seq_along(A), A, FUN=length))> 1,]
或者不使用任何分组,我们可以使用duplicated
来获取索引和子集
df1[duplicated(df1$A)|duplicated(df1$A, fromLast=TRUE),]
df1[with(df1, ave(seq_along(A), A, FUN=length))> 1,]
df1[duplicated(df1$A)|duplicated(df1$A, fromLast=TRUE),]