我有一些大型数据集(超过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,但由于我使用的数据集非常大,性能受到很大阻碍。有什么建议吗?
答案 0 :(得分:0)
我们可以使用data.table
,dplyr
或base 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),]