![](/img/trans.png)
[英]Matlab or R: replace elements in matrix by values from another matrix in order
[英]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.