根据特定列删除重复行

时间:2015-08-07 06:00:57

标签: r

如何在维护数据集的同时根据特定列删除重复的行。我尝试使用这些links1link2

我想要做的是希望在第3列到第6列的基础上看到歧义。如果它们的值相同,则处理后的数据集应该删除行,如示例所示:

我使用了这段代码但是我给了我一半的结果:

Data <- unique(Data[, 3:6])

假设我的数据集是这样的

 A  B  C  D  E  F  G  H  I  J  K  L  M
 1  2  2  1  5  4  12 A  3  5  6  2  1
 1  2  2  1  5  4  12 A  2 35  36 22 21
 1  22 32 31 5 34  12 A  3  5  6  2  1

我想要的输出是:

 A  B  C  D  E  F  G  H  I  J  K  L  M
 1  2  2  1  5  4  12 A  3  5  6  2  1
 1  22 32 31 5 34  12 A  3  5  6  2  1    

2 个答案:

答案 0 :(得分:2)

假设您的数据存储为数据框,您可以尝试:

Data <- Data[!duplicated(Data[,3:6]),]
#> Data
#  A  B  C  D E  F  G H I J K L M
#1 1  2  2  1 5  4 12 A 3 5 6 2 1
#3 1 22 32 31 5 34 12 A 3 5 6 2 1

函数duplicated()返回一个逻辑向量,在这种情况下包含每行的信息,关于第3列到第6列中条目的组合是否重新出现在数据集的其他位置。此逻辑向量的否定!用于从数据集中选择行,从而生成具有第3列到第6列中条目的唯一组合的数据集。

感谢@thelatemail在我之前的帖子中指出了一个错误。

答案 1 :(得分:2)

另一个选项是来自unique的{​​{1}}。它有data.table选项。我们将'data.frame'转换为'data.table'(by),使用setDT(df1)并指定unique

中的列
by

library(data.table) unique(setDT(df1), by= names(df1)[3:6]) # A B C D E F G H I J K L M #1: 1 2 2 1 5 4 12 A 3 5 6 2 1 #2: 1 22 32 31 5 34 12 A 3 5 6 2 1 返回unique,删除了重复的行。