如何自动对矩阵进行子集化以获得矩阵之间的匹配维度

问题描述 投票:0回答:1

我有两个维度不同的矩阵。我想对其中一个进行子集化,以便尺寸相同。这两个矩阵是使用 quantmod getSymbol() 得到的 VOO 和 VTI 矩阵。

VOO 为 3415x6,VTI 为 4434x6。对于它们两个具有匹配的尺寸,我必须将 VTI 子集化为 VTI[929:4434,]。我想对多个 ETFS 执行此操作,并且单独查找每个数字进行子集化会很乏味。

我创建了一个函数,可以告诉我一个矩阵比另一个矩阵大多少行,但我想知道是否有一种更简单的方法可以做到这一点,就像已经内置的函数一样。

这是我的代码。

dim(VOO)
dim(VTI)
4434-3415
cor(VTI[929:4343,],VOO)

使用函数测试

matrix.subset <- function(x,y) {
  
if(dim(x)[1] > dim(y)[1]) {cat("x", ">", "y"," : ",as.numeric(dim(x)[1] - dim(y)[1]))}
if(dim(y)[1] > dim(x)[1]) {cat("y" ,">", "x"," : ",as.numeric(dim(y)[1] - dim(x)[1]))}
}
matrix.subset(VOO,VTI)

输出:

y > x  :  928
r statistics
1个回答
0
投票

我会使用

tail
函数,它采用矩阵或数据帧的最后
n
行(或向量的最后
n
值),并可能编写如下函数:

matrix_subset = function(m_list) {
  min_rows = min(sapply(m_list, nrow))
  lapply(m_list, tail, n = min_rows)
}

此函数接受

list
矩阵输入,找到
n
行最少的矩阵,并将它们全部截断到底部
n
行。 (它不会对列执行任何操作。)然后它会在列表中返回结果。您可以在 2 个矩阵或更多矩阵的列表上使用它。

© www.soinside.com 2019 - 2024. All rights reserved.