如何从R列表中删除“setequally”重复元素?

时间:2018-02-14 15:41:38

标签: r

假设我在R中有一些列表 li ,其元素是向量。例如,

li=list(a=c(2,3,5),b=c(77,119,81),c=c(9,11,13),d=c(5,2,3),e=c(80,45,16),f=c(16,17,19),g=c(13,9,11),h=c(22,13,58)) 

可以看出, li 中的所有对象都与不同,为矢量。因此,

duplicated(li)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

此外,命令unique(li)将返回相同的列表 li 。但请注意,元素a和d以及c和g等于作为集合。即,

setequal(li$a,li$d)
[1] TRUE

setequal(li$c,li$g)
[1] TRUE

因此,元素a由元素d复制作为集合,元素c由元素g复制作为集合。我的问题是:如何从列表中删除R中的“setequally”重复元素?

2 个答案:

答案 0 :(得分:1)

怎么样:

li[apply(sapply(li, function(x) sapply(li, setequal, x)), 2, sum)==1]

$b
[1]  77 119  81

$e
[1] 80 45 16

$f
[1] 16 17 19

$h
[1] 22 13 58

答案 1 :(得分:0)

我们可以获取unique sort个ed元素,然后使用set删除所有duplicated个相等的元素

li1 <- lapply(li, function(x) sort(unique(x)))
i1 <- !(duplicated(li1)|duplicated(li1, fromLast = TRUE))
li[i1]
#$b
#[1]  77 119  81

#$e
#[1] 80 45 16

#$f
#[1] 16 17 19

#$h
#[1] 22 13 58
相关问题