I have the following data frame:
> df1 <- data.frame("valA" = c(1,1,1,1,2,1,3,3,3), "valB" = c(1,2,3,1,2,3,1,2,3), "Score" = c(100,90,80,100, 60,80,10,20,30))
> df1
valA valB Score
1 1 1 100
2 1 2 90
3 1 3 80
4 1 1 100
5 2 2 60
6 1 3 80
7 3 1 10
8 3 2 20
9 3 3 30
我希望您能够得到复制的值(期望结果是):
valA valB Score
1 1 1 100
2 1 3 80
3 1 1 100
4 1 3 80
我知道在dplyr::distinct
中有代码可以获取唯一值,但我需要知道哪些行是重复的,而不是将重复的从数据框中删除。我尝试过使用R基础的duplicated
函数,但由于我的数据量很大(超过2000万行),它的速度太慢了。我还尝试过:
duplicated_df1 <- df1 %>% group_by(valA, valB, Score) %>% filter(n() > 1)
可以得到上述期望的结果,但是速度太慢了且我没有足够的RAM。请问有什么高效快捷的方法来查找重复行吗?
duplicated(df1)
吗? - talatdf1[duplicated(df1) | duplicated(df1, fromLast = T), ]
或者df1 %>% filter(duplicated(df1) | duplicated(df1,fromLast = T))
- Romanlibrary(data.table); setDT(df1, key = c("valA", "valB", "Score")); df1[, N := .N, by = key(df1)]; df1[N > 1]
- talat