【发布时间】:2018-05-06 15:16:31
【问题描述】:
我有一个带有数值的元素矩阵,例如:
> mtx <- as.matrix(read.csv("matrix.csv", header = TRUE, row.names = 1,sep = ","))
> head(mtx)
BE BG EE ES FI
BE 0.00 0.75 0.17 0.28 0.48
BG 0.75 0.00 0.92 1.03 1.24
EE 0.17 0.92 0.00 0.11 0.31
ES 0.28 1.03 0.11 0.00 0.20
我想根据列和行的名称将某些元素中的值替换为零。即,当列“BE”与行“ES”相交时,我希望为零,反之亦然,即当列“ES”与行“BE”相交时,所以我想得到:
BE BG EE ES FI
BE 0.00 0.75 0.17 0.00 0.00
BG 0.75 0.00 0.92 1.03 1.24
EE 0.17 0.92 0.00 0.11 0.31
ES 0.00 1.03 0.11 0.00 0.00
我必须对许多矩阵执行此操作,这些矩阵比此示例大,因此需要替换 >150 对。这是data structure。需要更换:
c('BE', 'FI', 'FR', 'DE', 'IE', 'NL', 'NO', 'SE', 'CH', 'GB', 'DK','PT','ES')
我找到了函数replace,但它显然只基于应用于值的标准,而不是包含它们的元素的行和列的名称...
【问题讨论】:
-
试试
mtx[c("BE", "ES"), c("ES", "BE")] <- 0 -
或使用矩阵索引:
mtx[rbind(c("BE", "ES"), c("ES", "BE"))] <- 0。看看?"[",值得看两三遍。 -
谢谢!问题是有数百个这样的对,这就是为什么我正在寻找可以自动化它的东西
-
通常,人们会要求您提供一个可重现的示例来说明您的问题。在这里,您应该在 mtx 上使用
dput并将结果粘贴到您的问题中。其次,您应该通过在您的问题文本中提及它或者通过在您的示例中添加第二对来包含附加信息。查看?ncomb。这可能会有所帮助。还有expand.grid。目前尚不清楚您的数百对数据结构是什么,因此您也应该在问题中提供此信息。 -
谢谢,我已经相应地调整了问题