首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用不同长度的数据填充空矩阵

用不同长度的数据填充空矩阵
EN

Stack Overflow用户
提问于 2019-05-22 04:42:33
回答 1查看 0关注 0票数 0

您好,我已经编写了一个代码,可以从Fred获取财务数据。它应该获取所有数据并将数据放入空矩阵中。

这看起来比我想象的要困难得多。例如:

代码语言:javascript
运行
复制
tickers = c("AAA", "BAA", "TB3MS")

###HÄMTAR DATA###
library(quantmod)
var = noquote(tickers)
getSymbols(tickers, src = "FRED")

#kontrollera längderna och skapa en vector med längderna
vector = c()
for (v in 1:length(var)) {
    vector[v] = length(get(var[v]))
}
minsta = min(vector)
längsta = max(vector)

emptym = matrix( nrow = längsta, ncol = length(tickers)+1)

for (i in 1:length(var)) {
    emptym[,i] = get(var[i])
}

但由于TB3MS比其他两组短,我得到一个错误。

代码语言:javascript
运行
复制
"number of items to replace is not a multiple of replacement length"

我想弄清楚如何解决这个问题?在for循环中创建一个for循环?

我也试过这个:

代码语言:javascript
运行
复制
cbind.fill <- function(...){
    nm = list(...) 
    nm = lapply(nm, as.matrix)
    n = max(sapply(nm, nrow)) 
    do.call(cbind, lapply(nm, function (x) 
        rbind(x, matrix(, n-nrow(x), ncol(x))))) 
}

但是这个在结尾处给出了NA,我从头开始需要NA,然后用数据填充它。

EN

回答 1

Stack Overflow用户

发布于 2019-05-22 14:30:01

您可以先将数据收集到列表中:

代码语言:javascript
运行
复制
A = list();
A[[1]] = c(1,2);
A[[2]] = c(3,4,5);

然后将列表转换为向量:

代码语言:javascript
运行
复制
B = unlist(A)

之后。将向量转换为矩阵:

代码语言:javascript
运行
复制
Row = 3; Col = 4;

B[(length(B)+1) : (Row*Col)] = NA;

C = matrix(B, nrow = Row, ncol = Col)

(注意,我在向量的末尾添加了“NA”,直到矩阵的维度变为真)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100005179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档