从r中的多个列表生成二进制(存在/不存在)数据矩阵 [英] make binary (presence/absence) data matrix from multiple lists in r

查看:21
本文介绍了从r中的多个列表生成二进制(存在/不存在)数据矩阵的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一系列不同长度的独立变量列表(字符串)。我想将它们合并到一个数据帧中,以形成存在(1)/不存在(0)矩阵。考虑到它们的长度不同,我甚至想不出如何创建初始数据框。下面是我的例子:

data1 <- c("a", "b", "c", "d", "e", "f")
data2 <- c("e", "f", "g")
data3 <- c("a", "c", "g")

我的最终结果我想创建一个二进制存在/缺席矩阵,如下所示,这样我就可以创建一个图形(类似于热图)来显示它。

   data1     data2    data3
a    1        0         1
b    1        0         0
c    1        0         1   
d    1        0         0
e    1        1         0
f    1        1         0
g    0        1         1

我对R还是新手,所以希望我的解释是正确的。谢谢你的帮助。

推荐答案

splitstackshape包中有一个名为charMat的帮助器函数,您可能希望尝试一下

dat <- paste0("data", 1:3)
out <- t(splitstackshape:::charMat(listOfValues = mget(dat), fill = 0L))
colnames(out) <- dat
out
#  data1 data2 data3
#a     1     0     1
#b     1     0     0
#c     1     0     1
#d     1     0     0
#e     1     1     0
#f     1     1     0
#g     0     1     1

数据

data1 <- c("a", "b", "c", "d", "e", "f")
data2 <- c("e", "f", "g")
data3 <- c("a", "c", "g")

说明

该函数需要list作为第一个参数。我们可以使用mget创建该列表

mget(dat)
#$data1
#[1] "a" "b" "c" "d" "e" "f"

#$data2
#[1] "e" "f" "g"

#$data3
#[1] "a" "c" "g"

其中dat是包含输入数据名称的字符矢量

dat
#[1] "data1" "data2" "data3"

t用于转置charMat的输出。

希望这能有所帮助。

这篇关于从r中的多个列表生成二进制(存在/不存在)数据矩阵的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆