仅消除某些列中的重复行,将所有列保留在 R [重复]
Posted
技术标签:
【中文标题】仅消除某些列中的重复行,将所有列保留在 R [重复]【英文标题】:Eliminate duplicated rows only in certain columns, keeping all the columns in R [duplicate] 【发布时间】:2016-11-21 14:31:16 【问题描述】:我只向Select
发送某些列(ID、位置1、位置2 和名称)中不重复的数据。小时不同并不重要,该行仍将被视为重复。问题是我需要维护 Hour 列
| 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、位置 1、位置 2 和名称上重复,所以我想删除其中一个,不管哪一个。我尝试使用
df <- sqldf('SELECT DISTINCT ID, position1, position2, Name FROM df')
问题是我丢失了 Hour 列。如何保留 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】:怎么样:
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')
【讨论】:
这并没有解决问题,而是提供了一种解决方法来避免学习 sql 命令。以上是关于仅消除某些列中的重复行,将所有列保留在 R [重复]的主要内容,如果未能解决你的问题,请参考以下文章
R:如何使用其他列中的数据在一列中创建多个新值并为每个新值重复行?
在python数据框中删除不包含列中特定字符串的多列的重复项
Libre Office 电子表格 - 如何在列中的多个重复值中仅保留一个值?
在R中,寻找一种更有效的方法来计算列中的最大值与同一列中的所有值之间的差异[重复]
pandas删除数据行中的重复数据行基于dataframe所有列删除重复行基于特定数据列或者列的作何删除重复行删除重复行并保留重复行中的最后一行pandas删除所有重复行(不进行数据保留)