【发布时间】:2015-09-24 07:24:44
【问题描述】:
我有一个 3 列的 data.frame(变量:ID.A、ID.B、DISTANCE)。我想在以下条件下删除重复项:将具有最小值的行保留在第 3 列中。
这与这里的问题相同: R, conditionally remove duplicate rows (类似:Remove duplicates based on 2nd column condition)
但是,在我的情况下,还有第二个问题:当 情侣(ID.A、ID.B、DISTANCE)重复时,我必须删除行,而不仅仅是在 @ 987654330@重复了。
我尝试了几件事,例如:
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的完美工作,但你的问题没有意义。 “保留第 3 列中的最小值”和“删除重复的三胞胎行”是什么意思?如果三元组重复,那么第 3 列中必然只有一个值吗?我错过了什么吗? -
@Alex - 我假设 OP 表示对联
ID.A / ID.B,但他们应该澄清一下。 -
我添加了一个例子。 @thelatermail 你是对的,不清楚,这是一对 ID.A / ID.B,第 3 列有条件
-
我很确定这是其中一个链接查询的副本 - 您可以先运行
order操作以获得您想要的dat <- dat[do.call(order, dat),]; dat[!duplicated(dat[1:2]),]
标签: r dataframe duplicates conditional-statements plyr