跨列删除重复值

3
df
     [,1] [,2]
 [1,] "a"  "b" 
 [2,] "a"  "c"
 [3,] "a"  "d"
 [4,] "b"  "a"
 [5,] "b"  "c"
 [6,] "b"  "d" 
 [7,] "c"  "a" 
 [8,] "c"  "b" 
 [9,] "c"  "d"

假设我们有一个像这样的数据框,我想根据列中的值来去除重复项。
df1
     [,1] [,2]
 [1,] "a"  "b" 
 [2,] "a"  "c"
 [3,] "a"  "d"
 [5,] "b"  "c"
 [6,] "b"  "d" 
 [9,] "c"  "d"

我希望能达到这样的境界。

请查看 https://dev59.com/WGox5IYBdhLWcg3wsGaC 以及该问题侧边栏中的许多链接问题,了解有关此相同问题的变体。 - thelatemail
1个回答

3
我们可以使用apply函数对每一行中的元素进行排序,然后将输出转置,再应用duplicated函数返回逻辑向量,并将其用于的子集。
df[!duplicated(t(apply(df[, 1:2], 1, sort))),]
#     [,1] [,2]
#[1,] "a"  "b" 
#[2,] "a"  "c" 
#[3,] "a"  "d" 
#[4,] "b"  "c" 
#[5,] "b"  "d" 
#[6,] "c"  "d" 

另一个选项是pmin/pmax

df[!duplicated(cbind(pmin(df[,1], df[,2]), pmax(df[,1], df[,2]))),]

数据

df <- structure(c("a", "a", "a", "b", "b", "b", "c", "c", "c", "b", 
"c", "d", "a", "c", "d", "a", "b", "d"), .Dim = c(9L, 2L))

如何在数据框中进行修改,如果有第三列,但我们只对基于第1列和第2列的重复项感兴趣? - iHermes
1
@iHermes,你可以只对前两列进行子集操作。已更新。 - akrun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接