I have a list of 2 elements' combination like below.
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")
)
I'd like to summarize above list. Expected result is like below list. Order of element in a vector doesn't matter here.
[[1]]
[1] "A" "B"
[[2]]
[1] "C" "D" "E"
[[3]]
[1] "F" "G"
[[4]]
[1] "H" "I"
[[5]]
[1] "J" "K"
(Rule 1) {A, B} is equivalent to {B, A}. To correspond this I think I can do this.
cbnl <- unique(lapply(cbnl, function(i) { sort(i) }))
(Rule 2) {A, B}, {B, C} (One of element is common) then take a union of two sets. It results {A, B, C}. I don't have clear nice idea to do this.
Any efficient way to do this?
The sum of all possible combinations of n distinct things is 2 n. C0 + nC1 + nC2 + . . . + nC n = 2 n.
Once the queries from the tables are ready, go to Data > Get Data > Combine Queries > Merge to open the Merge dialog of Power Query. Select each table in the drop downs. Click on the column for each table to select them. Finally select Full Outer option for Join Kind to join by all rows from both tables.
I know this answer is more like a traditional programming rather than "R like" but it solves the issue.
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
gives,
[[1]]
[1] "A" "B"
[[2]]
[1] "C" "D" "E"
[[3]]
[1] "F" "G"
[[4]]
[1] "H" "I"
[[5]]
[1] "J" "K"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With