如何从0-1关联矩阵(Incident matrix)中提取对应TRUE的名称?
从0-1关联矩阵提取对应1的名称(R语言实现)
嘿,我猜你是在R里处理这个关联矩阵对吧?毕竟你给的是R的structure()输出~下面给你几个简单实用的方法,帮你提取所有值为1的位置对应的行/列名称:
先明确前提:确保矩阵有行名和列名
首先得保证你的矩阵是带有行名和列名的(如果没有的话,先手动加上),我先构造一个小示例矩阵方便演示:
# 构造带名称的示例关联矩阵 incidence_mat <- matrix( c(0,1,1,0,1,0,1,0), nrow = 4, dimnames = list( rows = c("A", "B", "C", "D"), cols = c("X", "Y") ) )
方法1:一次性提取所有关联的行+列名称(最直观)
用which()函数配合arr.ind=TRUE参数,可以直接拿到所有值为1的位置的行号和列号,再通过索引提取对应的名称:
# 获取所有值为1的位置索引 true_positions <- which(incidence_mat == 1, arr.ind = TRUE) # 把行名和列名组合成数据框,清晰展示关联关系 true_associations <- data.frame( 关联行名 = rownames(incidence_mat)[true_positions[, "row"]], 关联列名 = colnames(incidence_mat)[true_positions[, "col"]] ) # 查看结果 print(true_associations)
运行后会得到一个数据框,每一行代表一组行和列的关联(也就是矩阵中值为1的位置)。
方法2:按行/列分组提取关联名称
如果你想按行查看每一行对应的关联列名(或者反过来按列看关联行名),用apply()函数就很方便:
# 按行提取:每行中值为1的列名 row_related_cols <- apply(incidence_mat, 1, function(x) colnames(incidence_mat)[x == 1]) print(row_related_cols) # 按列提取:每列中值为1的行名 col_related_rows <- apply(incidence_mat, 2, function(x) rownames(incidence_mat)[x == 1]) print(col_related_rows)
这个方法返回的是列表结构,每个元素对应一行/列的关联名称,适合你需要分组查看的场景。
小提示:如果矩阵没有名称怎么办?
如果你的原始矩阵没有行名和列名,先手动设置:
# 给行和列设置自定义名称 rownames(incidence_mat) <- paste0("节点_", 1:nrow(incidence_mat)) colnames(incidence_mat) <- paste0("事件_", 1:ncol(incidence_mat))
内容的提问来源于stack exchange,提问作者Filipe Rigueiro
相关产品推荐
相关产品推荐

