簡體   English   中英

R:將一個矩陣的值映射到另一矩陣的階上

[英]R: map values of one matrix onto order of another matrix

我有兩個矩陣。 “ order”是一個矩陣,其中包含我想要數據的順序(其中1是事件,零是非事件)。 每行給出每個記錄的順序。 但是,我這里不需要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")))

幾個小時以來,我一直在用for循環弄亂,以使其在R中起作用,這真讓我發瘋。 我強烈懷疑這里有一個非for循環選項,但老實說我不在乎如何獲得最終結果。 計算機時間不是一個因素,我的數據集僅在數百行中。 我還應注意,矩陣的大小相同。 謝謝!

好吧,我找到了一個需要循環的簡單答案,但這至少是這樣:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM