如何替换数据框中行名与列名相同位置的单元格值为1
解决方法
要将数据框中行名与列名相同的单元格替换为1,可以通过生成行名和列名的匹配逻辑矩阵定位目标位置,再完成赋值操作,具体步骤如下:
步骤1:生成匹配逻辑矩阵
使用outer()函数逐一对比行名与列名是否相等,得到一个和原数据框维度一致的逻辑矩阵,其中TRUE代表对应位置的行名和列名相同:
match_mat <- outer(rownames(dat), colnames(dat), `==`)
步骤2:替换目标位置的值
借助逻辑矩阵直接定位目标单元格,将其值替换为1:
dat[match_mat] <- 1
验证结果
执行上述代码后,原数据框会更新为:
ee bb cc dd ee 1 4 4 2 bb 2 1 5 3 cc 3 6 1 4 dd 4 7 7 1
这个方法不受目标位置是否在对角线的限制,只要行名和列名相同的单元格都会被精准替换,适配任意结构的行名/列名匹配场景。
内容的提问来源于stack exchange,提问作者Z. Zhang
相关产品推荐
相关产品推荐

