【问题标题】:eliminate repeated sublists from list从列表中消除重复的子列表
【发布时间】:2016-06-05 14:49:58
【问题描述】:

我有两个相等的子列表,并希望消除那些重复的列表并以列表格式提供结果。是否有任何功能可以做到这一点,例如相交或独特的应用于向量。我知道我可以取消列出,然后使用唯一的,然后在先前的结构上再次重新列出,但想知道是否有一个函数可以对列表执行与向量相同的操作。我也知道我可以使用 reduce as 来简化列表,然后通过@akrun 应用下面的建议。但是,我正在寻找能够处理具有复杂子列表的列表的解决方案。

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

【问题讨论】:

  • 您需要它作为列表列表吗?否则unique(do.call(c, TER))
  • @akrun - 是的,因为上面的函数只适用于列表。
  • # 你是对的编辑它应用程序
  • 一个选项是i1 &lt;- duplicated(do.call(c, TER), fromLast=TRUE);Filter(length, Map('[', TER, split(i1, rep(1:2, each =2))))
  • unique 也适用于“列表”; unique(TER) 似乎会给出你的输出,除非我遗漏了什么

标签: r


【解决方案1】:

一种方法是使用duplicated 返回逻辑索引,然后使用MapFilter 子集list

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

假设 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

【讨论】:

    猜你喜欢
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 2011-01-13
    • 2012-07-11
    相关资源
    最近更新 更多