我有一个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
)重复时,我必须删除行,而且不仅仅是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
答案 0 :(得分:2)
使用dplyr
,并对https://api-m.sandbox.paypal.com/docs/api/#PAYMENT_CREATION_ERROR
library(dplyr)
df %>%
group_by(id.a, id.b) %>%
arrange(dist) %>% # in each group, arrange in ascending order by distance
filter(row_number() == 1)
答案 1 :(得分: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