在R中打包两列矩阵

时间:2011-04-06 10:57:48

标签: r matrix

假设我有一个两列矩阵。如何将列打包成一对/元组,以便将它们分配到一个列矩阵?

> 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,所以我需要在同一维度内包含这个统计量。

2 个答案:

答案 0 :(得分:2)

您可以使用列表执行此操作。

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

那就是说,这是一种非常不像R的做事方式,可能比它的价值更麻烦。如果你描述了你真正想要做的事情,有人可能会向你展示一种更合适的方法。

更新:
根据更新后的问题,下面的代码会将macdsignal放在2n矩阵中。您可能希望编写更详细的功能(例如,使用各自的工具识别macdsignal列的功能。)

如果您希望macdsignal列位于不同的矩阵中,则只需grep out个对象中的列。

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])))

答案 1 :(得分:0)

如果我理解你的问题,那么:

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

但是,A的元素是字符,而不是向量。在矩阵中,每个元素必须是单个值。所以这几乎肯定不是你想要的。

还有两个选择:

  1. 一份清单(见约书亚的回答)
  2. 数组
  3. 但我们需要更多详细信息才能给您正确答案。