r - 从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
。
希望这可以帮助。
推荐阅读
- python - 在 Django 视图中等待另一个请求
- javascript - 使用 vscode 和 powershell 时出现“未定义的不和谐”
- python - 如何找到百分比变化值的同一行中的值
- c++ - 使用 C++ 在 OpenGL 中移动自动旋转的 3d 多边形
- java - 无法从 ViewHolder (RecycleView) 调用 Adapter(onBindViewHolder) 中的方法
- sql - 在 Redshift 中查找给定表名的模式名称
- android - 应用被终止时显示本地通知 - Xamarin.Android
- javascript - 如何呈现 Spotify 播放列表数据?
- memory-management - VSCode 工作区单独的扩展列表
- java - Micronaut 数据事务无法获取当前线程的事务同步会话