对列表的值进行分组的功能(在R中)

时间:2013-12-09 15:05:06

标签: r igraph

我正在尝试构建一个在编程方面不应该很难的函数,但是我在构思它时遇到了一些困难。希望你能比我更好地理解我的问题!

我想要一个函数,它将一个向量列表作为参数。像

这样的东西
arg1 = list(c(1,2), c(2,3), c(5,6), c(1,3), c(4,6), c(6,7), c(7,5), c(5,8))

该函数应输出一个包含两列的矩阵(或两个向量的列表或类似的列表),其中一列包含字母和其他数字。人们可以将该论证视为应该放在同一组中的位置/值的列表。如果列表中有向量c(5,6),则输出应包含数字列中值56旁边的相同字母。如果有以下三个向量c(1,2)c(2,3)c(1,3),则输出应包含值12旁边的相同字母和数字列中的3

因此,如果我们在函数中输入对象arg1,它应该返回:

myFun(arg1)

number_column   letters_column
     1                 A
     2                 A
     3                 A
     5                 B
     6                 B
     7                 B
     4                 C
     6                 C
     5                 D
     8                 D

(顺序并不重要。在使用字母E之前,字母D不应出现)

因此该函数构造了2组3(A:[1,2,3]和B:[5,6,7])和2组2(C:[4,6]和D:[ 5,8])。注意一个位置或数字可以在几个组中。

如果我的问题不清楚,请告诉我!谢谢!

1 个答案:

答案 0 :(得分:2)

正如我在评论中所写,似乎你想要一个列出maximal cliques of a graph的数据框,给出一个定义边缘的向量列表。

require(igraph)
## create a matrix where each row is an edge
argmatrix <- do.call(rbind, arg1)
## create an igraph object from the matrix of edges
gph <- graph.edgelist(argmatrix, directed = FALSE)
## returns a list of the maximal cliques of the graph
mxc <- maximal.cliques(gph)
## creates a data frame of the output
dat <- data.frame(number_column = unlist(mxc), 
 group_column = rep.int(seq_along(mxc),times = sapply(mxc,length)))
## converts group numbers to letters 
## ONLY USE if max(dat$group_column) <= 26
dat$group_column <- LETTERS[dat$group_column]
   # number_column group_column
# 1              5            A
# 2              8            A
# 3              5            B
# 4              6            B
# 5              7            B
# 6              4            C
# 7              6            C
# 8              3            D
# 9              1            D
# 10             2            D