如何汇总组合列表 [英] How to summarize a list of combination

查看:16
本文介绍了如何汇总组合列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含2个元素组合的列表,如下所示。

cbnl <- list(
  c("A", "B"), c("B", "A"), c("C", "D"), c("E", "D"), c("F", "G"), c("H", "I"),
  c("J", "K"), c("I", "H"), c("K", "J"), c("G", "F"), c("D", "C"), c("E", "C"),
  c("D", "E"), c("C", "E")
)

我想总结一下上面的清单。预期结果如下表所示。矢量中元素的顺序在这里无关紧要。

[[1]]
[1] "A" "B"

[[2]]
[1] "C" "D" "E"

[[3]]
[1] "F" "G"

[[4]]
[1] "H" "I"

[[5]]
[1] "J" "K"

(规则1){A,B}等价于{B,A}。为了与此相对应,我认为我可以这样做。

cbnl <- unique(lapply(cbnl, function(i) { sort(i) }))

(规则2){A,B},{B,C}(其中一个元素是公共的)然后取两个集合的并。结果是{A,B,C}。我没有明确的好主意来做这件事。

有什么有效的方法可以做到这一点吗?

推荐答案

我知道此答案更像是传统编程,而不是像&q;R一样,但它解决了问题。

cbnl <- unique(lapply(cbnl, sort))

i <- 1
count <- 1
out <- list()

while (i <= length(cbnl) - 1) {
  if (sum(cbnl[[i]] %in% cbnl[[i + 1]]) == 0) {
    out[[count]] <- cbnl[[i]]
    } else {
      out[[count]] <- sort(unique(c(cbnl[[i]], cbnl[[i + 1]])))
      i <- i + 1        
    }
  count <- count + 1
  i <- i + 1 
}

out

赠送,

[[1]]
[1] "A" "B"

[[2]]
[1] "C" "D" "E"

[[3]]
[1] "F" "G"

[[4]]
[1] "H" "I"

[[5]]
[1] "J" "K"

这篇关于如何汇总组合列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆