假設我生成了一個 4x4 矩陣,如下圖所示mat1。(影像來自 R Studio 控制臺的快照)。假設我生成了另一個任意大小的矩陣(下圖中為 1x2 mat2)。(在我的代碼中,基于用戶輸入的上述兩個矩陣的矩陣元素和維度各不相同;盡管列僅以 2 的倍數生成,因此我可以有一個 [ ]x2 矩陣、[ ]x4、[ ]x6,等,行數可以是任何整數)。
在我的代碼中,這 2 個矩陣合并為一個向量(通過 R 包進行處理需要一個向量shinyMatrix)。
由于這 2 個矩陣維度是可變的,因此在將這 2 個矩陣合并到一個向量中時,您最終不會得到正確數量的元素來轉換回“可維”矩陣。如下圖所示,mat3在組合 2 個矩陣后有 18 個元素mat1,mat2并且必須洗掉某些元素并插入 NA 以在此示例中以 4x4、16 元素矩陣結束。
在某些情況下,mat2可以有比 多的元素mat1。在這個例子中,我展示mat1了 16 個元素和mat22 個元素。
重要的是,在代碼中,只有前兩列mat1可以用這種方式替換為mat2值。的第 3 列mat1永遠不會被 更改mat2。
有沒有一種有效的方法來編碼?將 2 個矩陣一起放入較大矩陣的維度中,并用 NA 填充任何缺失的元素?
我正在沿著測量第mat11 列和第 2 列的長度、測量第mat21 列和第 2 列的長度、合并、替換元素等的路徑前進,但是以我有限的經驗,它看起來非常麻煩并且不太正確。我敢打賭 R 有一種巧妙的方法來完成這種事情。其中一項apply功能,如mapply?我讀過某處mapply非常適合對矩陣進行子集化。Tibbles?
這是我對下圖的矩陣輸入:
mat1 <- matrix(c(1,2,NA,NA, 3,4,NA,NA, 5:12), ncol = 4)
mat2 <- matrix(c(10,30), ncol = 2)
mat3 <- c(mat2,mat1)

uj5u.com熱心網友回復:
根據預期的輸出,我們可以選擇 'mat1' 中沒有的列,并通過在 'mat2' 的末尾附加anyNA并連接 ( c) 與length更正的列NA
c(sapply(mat2, `length<-`, nrow(mat1)), mat1[,!apply(mat1, 2, anyNA)])
[1] 10 NA NA NA 30 NA NA NA 5 6 7 8 9 10 11 12
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/340134.html
下一篇:根據R中的前一天填寫值
