根据R中多列(降序)的条件删除重复行

Remove duplicate rows based on conditions from multiple columns (decreasing order) in R

我有一个 3 列 data.frame(变量:ID.AID.BDISTANCE)。我想在一个条件下删除重复项:保留第 3 列中具有最小值的行。

和这里一样的问题: R, conditionally remove duplicate rows (类似的:Remove duplicates based on 2nd column condition

但是,在我的情况下,还有第二个问题:当 couples (ID.A, ID.B, DISTANCE) 是重复的,而不仅仅是 ID.A 是重复的。

我尝试了几种方法,例如:

df <- ddply(df, 1:3, function(df) return(df[df$DISTANCE==min(df$DISTANCE),]))

但是没用

示例:

这个数据集

    id.a id.b dist
1    1    1   12
2    1    1   10
3    1    1   8
4    2    1   20
5    1    1   15
6    3    1   16

应该变成:

    id.a id.b dist
3    1    1   8
4    2    1   20
6    3    1   16

使用dplyr,并适当修改Remove duplicated rows using dplyr

library(dplyr)

df %>%
group_by(id.a, id.b) %>%
arrange(dist) %>% # in each group, arrange in ascending order by distance
filter(row_number() == 1)

实现解决方案并保留所有列的另一种方法:

df %>% arrange(dist) %>% 
  distinct(id.a, id.b, .keep_all=TRUE)

#   id.a id.b dist
# 1    1    1    8
# 2    3    1   16
# 3    2    1   20