R 将列表转换为真实存在/不存在矩阵

R 将列表转换为真实存在/不存在矩阵,r,list,matrix,dplyr,tidyverse,R,List,Matrix,Dplyr,Tidyverse,我有一个字符向量列表: set.seed(1) sets.list <- list(s1 = paste0("id",sample(1:10,3,replace=F)), s2 = paste0("id",sample(1:10,4,replace=F)), s3 = paste0("id",sample(1:10,4,replace=F))) 我的问题是,如果有更简洁的代码,或者使用tidyverse,我们可以使用

我有一个字符向量列表:

set.seed(1)
sets.list <- list(s1 = paste0("id",sample(1:10,3,replace=F)),
                  s2 = paste0("id",sample(1:10,4,replace=F)),
                  s3 = paste0("id",sample(1:10,4,replace=F)))
我的问题是,如果有更简洁的代码,或者使用tidyverse,我们可以使用mtabulate

或者将其堆叠到一个两列data.frame中,然后使用以R为底的表

我们可以用mtabulate

或者将其堆叠到一个两列data.frame中,然后使用以R为底的表


在将每个列表元素转换为具有级别为sets.ID的因子后,我们使用table统计sets.list中每个列表元素的出现次数


在将每个列表元素转换为具有级别为sets.ID的因子后,我们使用table统计sets.list中每个列表元素的出现次数

我将%>%data.matrix添加到mtabulate选项,这样它将返回一个矩阵。我将%>%data.matrix添加到mtabulate选项,这样它将返回一个矩阵
sets.mat <- do.call(rbind,lapply(sets.list, function(s){
  set.row <- rep(0,length(sets.ids))
  set.row[which(sets.ids %in% s)] <- 1
  return(set.row)
}))

colnames(sets.mat) <- sets.ids
library(qdapTools)
as.matrix(mtabulate(sets.list))
+(table(stack(sets.list)[2:1]) > 0)
#  values
#ind  id1 id2 id3 id4 id5 id7 id9
#  s1   0   0   0   1   0   1   1
#  s2   1   1   0   0   1   1   0
#  s3   1   1   1   0   1   0   0
t(sapply(sets.list, function(x) table(factor(x, levels = sets.ids))))

#   id9 id4 id7 id1 id2 id5 id3
#s1   1   1   1   0   0   0   0
#s2   0   0   1   1   1   1   0
#s3   0   0   0   1   1   1   1