R 从列表中删除重复的子列表
我有两个相等的子列表,希望消除重复的列表,并以列表格式提供结果。有什么函数可以做到这一点,比如对向量应用intersect或unique。我知道我可以取消列表,然后使用unique,然后在先前的结构上再次重新列表,但我想知道是否有一个函数可以对列表而不是向量执行相同的操作。我也知道我可以使用reduce as来简化列表,然后通过@akrun应用下面的建议。但是,我正在寻找解决方案,以便能够处理具有复杂子列表的列表R 从列表中删除重复的子列表,r,R,我有两个相等的子列表,希望消除重复的列表,并以列表格式提供结果。有什么函数可以做到这一点,比如对向量应用intersect或unique。我知道我可以取消列表,然后使用unique,然后在先前的结构上再次重新列表,但我想知道是否有一个函数可以对列表而不是向量执行相同的操作。我也知道我可以使用reduce as来简化列表,然后通过@akrun应用下面的建议。但是,我正在寻找解决方案,以便能够处理具有复杂子列表的列表 TER <- list(list(c(1,2,3),c(1,2,3,4)),
TER <- list(list(c(1,2,3),c(1,2,3,4)),list(c(1,2,3),c(1,2,3,4)))
TER
#[[1]]
#[[1]][[1]]
#[1] 1 2 3
#[[1]][[2]]
#[1] 1 2 3 4
#[[2]]
#[[2]][[1]]
#[1] 1 2 3
#[[2]][[2]]
#[1] 1 2 3 4
# Desired Output.
TER
#[[1]]
#[[1]][[1]]
#[1] 1 2 3
#[[1]][[2]]
#[1] 1 2 3 4
TER一种方法是使用duplicated
返回逻辑索引,然后使用Map
和Filter
将列表子集化
l1 <- do.call(c, TER)
i1 <- duplicated(l1, fromLast=TRUE)|!duplicated(l1)
Filter(length, Map('[', TER, split(i1, rep(seq_along(TER), lengths(TER)))))
#[[1]]
#[[1]][[1]]
#[1] 1 2 3
#[[1]][[2]]
#[1] 1 2 3 4
你需要它是列表的列表吗?否则,unique(do.call(c,TER))
@akrun-是,因为上面的函数仅适用于列表。#您正确地编辑了它。一个选项将是i1unique
也适用于“列表”unique(TER)
似乎会给出您的输出,除非我遗漏了什么
TER <- list(list(c(1,2,3),c(1,3,3,4)),list(c(1,2,3),c(1,2,3,4)))
#[[1]]
#[[1]][[1]]
#[1] 1 2 3
#[[1]][[2]]
#[1] 1 3 3 4
#[[2]]
#[[2]][[1]]
#[1] 1 2 3 4