R语言中如何根据另一数据框的值修改矩阵行名与列名?
R语言按映射表替换矩阵行名、列名的实现方案
核心逻辑是构造「原名称-目标名称」的命名映射向量,通过名称匹配批量替换行、列的dimnames属性,全程使用base R内置函数,无需安装第三方扩展包。
操作步骤
- 第一步:准备测试数据(已有现成
mx矩阵和df映射表可跳过)
# 构造示例矩阵mx mx <- matrix( data = c(1,0,0, 0,1,0, 1,0,1), nrow = 3, dimnames = list( c("ABC", "DEF", "GHI"), c("ABC", "DEF", "GHI") ) ) # 构造示例映射数据框df df <- data.frame( letters = c("ABC", "DEF", "GHI"), country = c("UK", "USA", "Egypt") )
- 第二步:构建名称映射并完成替换
# 生成命名映射向量:向量名为原缩写标识,向量值为对应的国家名 name_map <- df$country names(name_map) <- df$letters # 批量匹配替换行名、列名 rownames(mx) <- name_map[rownames(mx)] colnames(mx) <- name_map[colnames(mx)]
- 第三步:结果验证
替换完成后直接打印mx,即可得到目标输出:
UK USA Egypt UK 1 0 1 USA 0 1 0 Egypt 0 0 1
注意事项
- 替换前建议先排查无匹配的名称,避免替换后出现NA值的行/列名,排查代码如下:
# 筛选行名中无法在映射表找到对应值的项 setdiff(rownames(mx), df$letters) # 筛选列名中无法在映射表找到对应值的项 setdiff(colnames(mx), df$letters)
如果以上两行代码返回结果均为空字符向量,说明所有名称都有对应映射,替换结果不会出现异常。
内容的提问来源于stack exchange,提问作者HelpMe
相关产品推荐
相关产品推荐

