2011-04-06 63 views
1

假設我有一個兩列矩陣。如何將列打包成一對/元組,以便將它們分配給一個列矩陣?在R中包含兩列矩陣

> A = matrix(NA,nrow=5,ncol=1) 
> B = matrix(runif(10),ncol=2) 
> A 
    [,1] 
[1,] NA 
[2,] NA 
[3,] NA 
[4,] NA 
[5,] NA 

> B 
      [,1]  [,2] 
[1,] 0.1886287 0.6995596 
[2,] 0.1576875 0.9792369 
[3,] 0.9056386 0.1640904 
[4,] 0.9125812 0.7003167 
[5,] 0.9327778 0.8149431 

> A[,1] = B # need this to work 

我有一個n-col矩陣的價格,每個股票的列。我試圖計算每隻股票的移動MACD統計量。我使用n-col MACD矩陣來包含結果。當我向MACD函數提供一列價格(從TTR包)時,它返回一個2-col矩陣的信號和macd,所以我需要在同一維度內包含這個統計量。

+1

你爲什麼要這樣做?如果您告訴我們您想要做什麼,我們可能會建議替代方案,例如矩陣列表... – Andrie 2011-04-06 11:11:07

+0

修訂後的問題以提供更多上下文。謝謝 – user236215 2011-04-06 11:18:25

+0

實際上我可以讓我的MACD矩陣有2n cols,並在稍後進行相應的引用。這可能是一個更清潔的解決方案,比下面給出的效率更高。你怎麼看? – user236215 2011-04-06 11:20:41

回答

2

你可以用列表來做到這一點。

> matrix(apply(B,1,list)) 
    [,1] 
[1,] List,1 
[2,] List,1 
[3,] List,1 
[4,] List,1 
[5,] List,1 

這就是說,這是做事情非常不-R般的方式可能是更多的麻煩比它的價值。如果你描述你實際想要做的事情,有人可能會向你展示更合適的方法。

UPDATE:
基於更新的問題,下面的代碼就會把macdsignal在2N矩陣。您可能希望編寫更詳細的功能(例如,使用各自的工具識別macdsignal列)。

如果您想在單獨的矩陣中使用macdsignal列,則可以從out對象的列中獲得grep列。

library(quantmod) 
getSymbols("SPY;IWM;QQQ") 
Data <- Cl(merge(SPY,IWM,QQQ)) 
out <- do.call(merge, lapply(1:NCOL(Data), function(i) MACD(Data[,i]))) 
0

如果我正確理解你的問題,然後:

A[,1] = paste(B[,1], B[,2]) 

然而,A的元素是字符,而不是載體。在矩陣中,每個元素必須是單個值。所以這幾乎肯定不是你想要的。

還有其他兩個選項:

  1. 名單(見約書亞的答案)
  2. 數組

,但我們需要更多的細節給你一個合適的回答。