仅消除某些列中的重复行,保留R

时间:2016-07-18 21:02:38

标签: r sqldf

我正在追踪Select只有某些列中没有重复的数据(ID,position1,position2和Name)。小时不同并不重要,该行仍将被视为重复。问题是我需要mantein列

|    ID | position1 | position2| Hour |   Name
---------------------------------------------------------
| ABD1  |     54340 |     33254| 10:42|   Adam 
| ABD1  |     54340 |     33254| 10:52|   Adam
| TGF5  |     54545 |     54545| 11:25|   Mike
| ABD1  |     84544 |     24424| 12:06|   Adam
| AGF4  |     25466 |     45444| 10:53|   Mike
| TGF5  |     44787 |     25847| 09:05|   Rose

在这个例子中,我们可以看到第1行和第2行在ID,position1,position2和Name上都是重复的,所以我想要消除其中的一行,无关紧要。我尝试使用

执行此操作
df <- sqldf('SELECT DISTINCT ID, position1, position2, Name FROM df')

问题是我丢失了列小时。我怎样才能控制相同的df列,但只消除某些列中相等的行。

这是我需要的结果:

|    ID | position1 | position2| Hour |   Name
---------------------------------------------------------
| ABD1  |     54340 |     33254| 10:42|   Adam 
| TGF5  |     54545 |     54545| 11:25|   Mike
| ABD1  |     84544 |     24424| 12:06|   Adam
| AGF4  |     25466 |     45444| 10:53|   Mike
| TGF5  |     44787 |     25847| 09:05|   Rose  

1 个答案:

答案 0 :(得分:0)

怎么样:

df[!duplicated(df[,c(1,2,3,5)]),]

其中1,2,3,5是您要考虑的列。

示例:

> df
    ID  Pos1  Pos2  Hour Name
1 ABD1 54340 33254 10:42 Adam
2 ABD1 54340 33254 10:52 Adam
3 TGF5 54545 54545 11:25 Mike
4 ABD1 84544 24424 12:06 Adam
5 AGF4 25466 45444 10:53 Mike
6 TGF5 44787 25847 09:05 Rose
> 
> 
> df[!duplicated(df[,c(1,2,3,5)]),]
    ID  Pos1  Pos2  Hour Name
1 ABD1 54340 33254 10:42 Adam
3 TGF5 54545 54545 11:25 Mike
4 ABD1 84544 24424 12:06 Adam
5 AGF4 25466 45444 10:53 Mike
6 TGF5 44787 25847 09:05 Rose
> 

此外:

library(sqldf)
sqldf('SELECT * 
       FROM df 
       GROUP BY ID, position1, position2, Name')