rm(list = ls())
###############################input data 
dir_path <- "C:\\Users\\xut2\\Desktop\\data\\"
dir_path_name <- list.files(pattern = ".*",dir_path,full.names = T, recursive = T)
dir_path_name
## [1] "C:\\Users\\xut2\\Desktop\\data\\data_1.xlsx"
library(openxlsx)
data_1 <- read.xlsx(grep("data_1.xlsx",dir_path_name,value = T), sheet = 1)
data_1
##   COL1 COL2
## 1    A   AA
## 2    A   BB
## 3    A   CC
## 4    B   BB
## 5    B   DD
## 6    B   CC
## 7    C   AA
## 8    C   BB
## 9    C   CC
compound_list_com <- data.frame(combn(unique(data_1$COL1),2))
compound_list_com
##   X1 X2 X3
## 1  A  A  B
## 2  B  C  C
data_list <- list()
for (i in 1:ncol(compound_list_com)) {
  #i = 1
  print(i)
  data_11 <- data_1[data_1$COL1 %in% as.character(compound_list_com[,i]), ]
  list_1 <- data_11[data_11$COL1 == as.character(compound_list_com[,i])[1],]$COL2
  list_2 <- data_11[data_11$COL1 == as.character(compound_list_com[,i])[2],]$COL2
  data_12 <- data.frame(from = as.character(compound_list_com[,i])[1], 
                        to = as.character(compound_list_com[,i])[2], 
                        value = length(as.character(intersect(list_1, list_2))))
  data_list[[i]] <- data_12
}
## [1] 1
## [1] 2
## [1] 3
data_2 <- do.call("rbind", data_list)
data_2
##   from to value
## 1    A  B     2
## 2    A  C     3
## 3    B  C     2
#############################################
data_list_1 <- list()
for (i in 1:length(unique(data_1$COL1))) {
  #i = 1
  data_u1 <- data_1[data_1$COL1 == unique(data_1$COL1)[i], ]
  data_u2 <- data_1[data_1$COL1 != unique(data_1$COL1)[i], ]
  data_u3 <- data.frame(from = unique(data_1$COL1)[i], 
                        to = unique(data_1$COL1)[i], 
                        value = length(as.character(setdiff(data_u1$COL2, data_u2$COL2))))
  data_list_1[[i]] <- data_u3
}
data_3 <- do.call("rbind", data_list_1)
data_3 
##   from to value
## 1    A  A     0
## 2    B  B     1
## 3    C  C     0
##############################################
data_4 <- rbind(data_2, data_3)
data_4
##   from to value
## 1    A  B     2
## 2    A  C     3
## 3    B  C     2
## 4    A  A     0
## 5    B  B     1
## 6    C  C     0
write.csv(data_4, paste0(dir_path,Sys.Date(),"-","data_for_chord.csv"),row.names = FALSE)

# install.packages("circlize")
library(circlize)
## Warning: package 'circlize' was built under R version 4.4.1
## ========================================
## circlize version 0.4.16
## CRAN page: https://cran.r-project.org/package=circlize
## Github page: https://github.com/jokergoo/circlize
## Documentation: https://jokergoo.github.io/circlize_book/book/
## 
## If you use it in published research, please cite:
## Gu, Z. circlize implements and enhances circular visualization
##   in R. Bioinformatics 2014.
## 
## This message can be suppressed by:
##   suppressPackageStartupMessages(library(circlize))
## ========================================
library(RPMG)
chordDiagram(data_4)

chordDiagram(data_4, grid.col = pastel.colors(3, seed=1)[3:1], transparency = 0.4,
             link.lwd = .1,    # Line width
             link.lty = .1,    # Line type
             link.border = .1,
             annotationTrack =  c("name", "grid"))

# Restart circular layout parameters
circos.clear()

#ref https://r-charts.com/flow/chord-diagram/