如果在R中满足条件,则比较行对并删除重复信息

时间:2017-03-15 18:22:25

标签: r rows

我对R很新,我无法针对以下问题找到合适的解决方案。我的数据框看起来像这样:

mydf <- data.frame(group1 = c("A", "B", "C", "C", "B", "A"),
                   group2 = c("B", "A", "A", "B", "C", "C"),
                   value = c(22, 22, 75, 84, 84, 75))
mydf

我想基本比较每对行并删除那些带有冗余信息的行,即如果group1 [row_n]等于group2 [row_m]并且group2 [row_n]等于group1 [row_m],则删除行。 value [row_n]等于值[row_m]。在示例中,最终数据框应如下所示:

final.df <- data.frame(group1 = c("A","C", "C"), 
                       group2 = c("B", "A", "B"), 
                       value = c(22, 84, 75))
final.df

希望有人可以提供帮助。提前谢谢。

2 个答案:

答案 0 :(得分:2)

您可以使用apply,然后删除重复项,如下所示:

df <- data.frame(t(apply(mydf,1,sort)))
final.df <- df[!duplicated(df),]

答案 1 :(得分:0)

您可以使用dplyr轻松完成此操作:

library(dplyr)
my.df.ord <- mydf %>%
             group_by(group1, group2) %>%
             mutate(gr.min = min(as.character(group1), as.character(group2)),
                    gr.max = max(as.character(group1), as.character(group2))) %>%
             ungroup() %>%
             select(gr.min, gr.max, value) %>%
             unique()

as.character是必需的,因为group1group2显示为因素。