删除具有多个列的数据框中的重复行

时间:2017-03-12 17:35:03

标签: r

在像这样的数据框架中

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)

可以使用(基于b列的结果)删除重复项:

df[!duplicated(df), ]

如果a在df中有第三列c并且我想再次根据b列的值删除副本,那么使用它是正确的:

 df[!duplicated(df$b), ]

使用第三列。 数据框:

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

使用基于b列的删除重复项:

 df[!duplicated(df$b), ]

结果如下:

a b  c
A 1  i
A 2 ii
B 4 ii

我希望这个

 a b c
A 1 i
A 2 ii
B 4 ii
B 1 iii
C 2 iv

1 个答案:

答案 0 :(得分:2)

输入:

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

在帖子中描述为预期输出:

 a b c  
 A 1 i
 A 2 ii
 B 4 ii
 B 1 iii
 C 2 iv

在所有列上使用distinct似乎可以执行您想要的操作:

>library(dplyr)
>distinct(df)
  a b   c
1 A 1   i
2 A 2  ii
3 B 4  ii
4 B 1 iii
5 C 2  iv

其他变体:仅允许唯一的b

> distinct(df,b, .keep_all = TRUE)
  a b  c
1 A 1  i
2 A 2 ii
3 B 4 ii