根据R中多列(降序)的条件删除重复行
Remove duplicate rows based on conditions from multiple columns (decreasing order) in R
我有一个 3 列 data.frame(变量:ID.A
、ID.B
、DISTANCE
)。我想在一个条件下删除重复项:保留第 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
我有一个 3 列 data.frame(变量:ID.A
、ID.B
、DISTANCE
)。我想在一个条件下删除重复项:保留第 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