将可变长度列表转换为边列表IGR

将可变长度列表转换为边列表IGR,r,list,variables,dataframe,igraph,R,List,Variables,Dataframe,Igraph,我在R中有一个列表,其中每个元素都有数量可变的字符串,例如: el: list chr [1:3] "sales", "environment", "communication" chr [1:2] "interpersonal", "microsoft office" chr [1:4] "writing", "reading", "excel", "python" 我想把这个列表转换成一个由两列组成的矩阵,如果两个字符串出现在列表的同一个元素中,那么这两列可以并排放置 matrix: "s

我在R中有一个列表,其中每个元素都有数量可变的字符串,例如:

el: list
chr [1:3] "sales", "environment", "communication"
chr [1:2] "interpersonal", "microsoft office"
chr [1:4] "writing", "reading", "excel", "python"
我想把这个列表转换成一个由两列组成的矩阵,如果两个字符串出现在列表的同一个元素中,那么这两列可以并排放置

matrix:
"sales", "environment"
"sales, "communication"
"environment", "communication"
"interpersonal", "microsoft office"
"writing", "reading"
"writing", "excel"
"writing", "python"
"reading", "excel"
"reading", "python"
"excel", "python"

我该怎么做呢?

如果我们需要
矩阵中的输出,我们可以使用
combn

do.call(rbind, lapply(lst, function(x) t(combn(x, 2))))
#     [,1]            [,2]              
# [1,] "sales"         "environment"     
# [2,] "sales"         "communication"   
# [3,] "environment"   "communication"   
# [4,] "interpersonal" "microsoft office"
# [5,] "writing"       "reading"         
# [6,] "writing"       "excel"           
# [7,] "writing"       "python"          
# [8,] "reading"       "excel"           
# [9,] "reading"       "python"          
#[10,] "excel"         "python"    
或者正如@thelatemail提到的,通过
unlist
ing'lst'调用
t
一次可能比多次更快

matrix(unlist(lapply(lst, combn, 2)), ncol=2, byrow=TRUE)

回答得好。取消列表
并将其馈送到矩阵中可能会稍微快一点-
矩阵(unlist(lappy(el,combn,2)),ncol=2,byrow=TRUE)
-虽然没有测试过这一点..我也有同样的问题,但我的分隔符是分号(文本中有逗号),文本是在数据帧值中。也许我会开始另一个问题?名单的名字是什么?是否为
lst
@adm您可能需要将数据帧列拆分为
,即
do.call(rbind,lapply(strsplit(as.character(data$Col),“,”),function(x)t(combn(x,2))
@adm,因为您可能有一些具有单个单词左右的元素。在这种情况下,您需要一个
if/else
条件,即
if(length(x)>2)执行这个else x