R:将一个矩阵的值映射到另一个矩阵的顺序

时间:2016-01-26 22:39:15

标签: r loops matrix mapping matching

我有两个矩阵。 “order”是一个矩阵,其中包含我想要数据的顺序(其中1是事件,0是非事件)。每行给出每条记录的顺序。但是,我不想要1或0,我想要一个值,A或B或其他什么。

orders <- structure(c("1", "1", "1", "1", "1", "1", "0", "1", "0", "0", 
"0", "0", "0", "0", "0", "0", "1", "0", "0", "0", "0", "0", "0", 
"1", "1", "1", "0", "0", "0", "0", "0", "1", "0", "0", "0", "1", 
"0", "0", "0", "0", "0", "0", "1", "0", "0", "0", "0", "0"), .Dim = c(6L, 
8L), .Dimnames = list(c("1", "2", "3", "4", "5", "6"), c("1", 
"2", "3", "4", "5", "6", "7", "8")))

“值”矩阵表示我想要映射到上述顺序的值。所以A和B取代了1。零保持不变。因此,如果第i行以AAB开头...为值,并且第i行的顺序为100101,则结果应为A00A0B。

values <- structure(c("A", "B", "A", "B", "A", "B", "A", "B", "0", "0", 
"A", "B", "A", "B", "0", "0", "0", "B", "0", "B", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"), .Dim = c(6L, 
8L))

所以我希望的输出看起来像这样:

desired <- structure(c("A", "B", "A", "B", "A", "B", "0", "B", "0", "0", 
"0", "0", "0", "0", "0", "0", "A", "0", "0", "0", "0", "0", "0", 
"B", "A", "B", "0", "0", "0", "0", "0", "B", "0", "0", "0", "B", 
"0", "0", "0", "0", "0", "0", "A", "0", "0", "0", "0", "0"), .Dim = c(6L, 
8L), .Dimnames = list(c("1", "2", "3", "4", "5", "6"), c("1", 
"2", "3", "4", "5", "6", "7", "8")))

我一直在乱哄圈几个小时试图让它在R中工作,这让我疯了。我强烈怀疑这里有一个非for循环选项,但老实说我并不关心如何得到最终结果。计算机时间不是一个因素,我的数据集只有几百行。我还应该注意到矩阵的大小相同。谢谢!

1 个答案:

答案 0 :(得分:0)

我找到了一个简单的答案,需要一个循环,但这至少是一些东西:

desired <- orders
for (i in 1:nrow(data)){
  desired[i,which(orders[i,]=="1")] <- values[i,which(values[i,]!="0")]}