2011-04-06 62 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. 数组

,但我们需要更多的细节给你一个合适的回答。