删除R中的重复行数据框


71

如何从此示例数据框中删除重复的行?

A   1
A   1
A   2
B   4  
B   1
B   1
C   2
C   2

我想根据两列删除重复项:

A   1
A   2
B   4
B   1
C   2

顺序并不重要。


@whuber不应该转移到SO吗?
llrs

@Llopis是的,但是现在这样做已经太迟了,而且当我们最初关闭它时已经太晚了。这种问题在很多年前就被认为是(边界)问题,但如今它已被迅速移植。
ub

Answers:


115

unique()确实回答了您的问题,但是实现相同目的的另一个相关且有趣的功能是duplicated()

它使您可以查找重复的行。

a <- c(rep("A", 3), rep("B", 3), rep("C",2))
b <- c(1,1,2,4,1,1,2,2)
df <-data.frame(a,b)

duplicated(df)
[1] FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE

> df[duplicated(df), ]
  a b
2 A 1
6 B 1
8 C 2

> df[!duplicated(df), ]
  a b
1 A 1
3 A 2
4 B 4
5 B 1
7 C 2

2
感谢您提及“重复”功能。它可用于根据列的子集删除重复的行。
Joko

51

您正在寻找unique()

a <- c(rep("A", 3), rep("B", 3), rep("C",2))
b <- c(1,1,2,4,1,1,2,2)
df <-data.frame(a,b)
unique(df)

> unique(df)
  a b
1 A 1
3 A 2
4 B 4
5 B 1
7 C 2

1
谢谢伯恩德。我认为唯一只能应用于特定的列。我不知道它是否也可以用于整个数据帧。再次感谢
Jana
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.