假设我有一个两列矩阵。如何将列打包成一对/元组,以便将它们分配到一个列矩阵?
> 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,所以我需要在同一维度内包含这个统计量。
答案 0 :(得分:2)
您可以使用列表执行此操作。
> matrix(apply(B,1,list))
[,1]
[1,] List,1
[2,] List,1
[3,] List,1
[4,] List,1
[5,] List,1
那就是说,这是一种非常不像R的做事方式,可能比它的价值更麻烦。如果你描述了你真正想要做的事情,有人可能会向你展示一种更合适的方法。
更新:
根据更新后的问题,下面的代码会将macd
和signal
放在2n矩阵中。您可能希望编写更详细的功能(例如,使用各自的工具识别macd
和signal
列的功能。)
如果您希望macd
和signal
列位于不同的矩阵中,则只需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
的元素是字符,而不是向量。在矩阵中,每个元素必须是单个值。所以这几乎肯定不是你想要的。
还有两个选择:
但我们需要更多详细信息才能给您正确答案。