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