我对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
希望有人可以提供帮助。提前谢谢。
答案 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
是必需的,因为group1
,group2
显示为因素。