仅识别非重复行

6

我有一个包含许多重复行的数据集,我希望只隔离不重复的值。 我的数据框大致如下

df <- data.frame("group" = c("A", "A", "A","A","A","B","B","B"), 
                    "id" = c("id1", "id2", "id3", "id1", "id2","id1","id2","id1"), 
                    "Val" = c(10,10,10,10,10,12,12,12))

我想提取的是没有重复的行,即我的最终数据集应该如下所示。
final <- data.frame("group" = c("A","B"), 
                 "id" = c("id3","id2"), 
                 "Val" = c(10,12))

请注意,我不是在寻找唯一值,而是非重复值。我知道如何找到唯一值,例如df %>% distinct()可以完成任务。我正在努力找到非重复的行。

1个回答

8

这里有一个选项。

library(dplyr)
df %>%
   group_by(group) %>% 
   filter(!(duplicated(id)|duplicated(id, fromLast = TRUE)))

或者仅使用dplyr

df %>% 
     group_by_all %>%
     filter(n() ==1)

在较新版本的 dplyr 中(由@Pål Bjartan建议)
df %>% 
  group_by(across(everything())) %>% 
  filter(n() ==1)

或者使用base R

df[!(duplicated(df[1:2])|duplicated(df[1:2], fromLast = TRUE)),]

@d.b. 是的,我认为OP只想要选定列作为分组。 - akrun
2
感谢您的解决方案,非常有帮助。关于您的 dplyr 解决方案,作用域动词(_if_at_all)已经被现有动词中的 across() 取代。我建议您更新您的解决方案以反映这一点:df %>% group_by(across(everything())) %>% filter(n() ==1) - Pål Bjartan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接