r - 从 group1、group2、overlap_count 创建一个重叠矩阵?
问题描述
我有一个数据框,其中 g1、g2 代表两个组,还有一个 val 列,表示在 g2 中也可以找到 g1 中的多少项目的计数。
## Input dataframe
data.frame(
g1 = c('a','a','a','b','b','b','c','c','c','d'),
g2 = c('a','b','c','a','b','c','a','b','c','d'),
val = c(10,4,1,4,5,0,1,0,3,4),
stringsAsFactors = FALSE
)
我在格式化数据框时遇到问题,如下所示。我可以创建一个空的命名矩阵,其具有来自 g1/g2 的不同列/行名称,并遍历输入数据帧中的每一行,将其值写入匹配的 g1:row-id g2:column-id 组合,但这似乎效率低下;我想知道是否有任何库提供了一种自动化方法?
## Output overlap matrix
data.frame(a = c(10,4,1,0),
b = c(4,5,0,0),
c = c(1,0,3,0),
d = c(0,0,0,4),
row.names = c('a','b','c','d'))
之前已经提出过关于组之间重叠的类似问题,但是我们有一个组列表和其中的项目,并且想要找出组之间有多少项目重叠。
在这里,我知道组之间有多少项目重叠,但无法以正确的方式对其进行格式化。
解决方案
这类似于如何将数据从长格式重塑为宽格式,略有不同的是 id 列应保留为行名。为此,我们可以使用reshape2::acast
.
reshape2::acast(Input_dataframe, formula = g1 ~ g2, fill = 0)
# > a b c d
# > a 10 4 1 0
# > b 4 5 0 0
# > c 1 0 3 0
# > d 0 0 0 4
推荐阅读
- d3.js - D3 scaleBand() 导致路径属性错误
- terraform - Terraform 允许 AKS 使用 ACR
- python - 使用 Matplotlib 在一条线上选择 N 个点
- python - 类型对象不可下标
- rest - Shopware 6 产品 api
- javascript - 使用占位符值作为输入值
- java - 使用 Spring 在运行时从属性文件动态加载对象
- filter - Google Analytics:按自定义维度过滤
- php - 如何在 Sentry laravel 中 Cron 作业日志
- python - statsmodels SARIMAX 摘要中未显示差异术语