【问题标题】:R: How to convert a vector into matrix without replicating the vector?R:如何在不复制向量的情况下将向量转换为矩阵?
【发布时间】:2017-04-21 02:14:28
【问题描述】:

这是我的问题: 我有一个向量,我想将其转换为具有固定列数的矩阵,但我不想在必要时复制向量来填充矩阵。 例如: 我的向量的长度为 15,我想要一个有 4 列的矩阵。我希望从向量中获取包含 15 个元素的矩阵,并为矩阵中的最后一个元素获取 0。 我怎样才能做到这一点?

编辑: 很抱歉没有清楚地说明问题并用我的例子误导了你们。在我的程序中,我不知道向量的长度,它取决于其他参数,并且这个问题涉及循环,所以我需要一个可以解决许多不同情况的通用解决方案,而不仅仅是我的示例。 感谢您的回答。

【问题讨论】:

  • 假设你的向量是letters[1:15]matrix(c(letters[1:15],0), ncol=4)会给你一个4列的矩阵
  • x <- 1:15; m <- matrix(x, ncol = 4); m[-seq_along(x)] <- 0 也许
  • @AdamQuek 感谢您的回答。实际上那个例子不是很清楚(我没有清楚地说明这个问题是不好的)。在我的程序中,我不知道向量的长度,所以我无法明确地填充矩阵。
  • 请提供reproducible example 以及您迄今为止尝试过的代码。只是说“涉及循环”太含糊了。向我们展示您的预期输出。
  • 例如:我需要将我的时间离散化到一些数值方法的应用中。让 Tmax 是我的时间跨度, h0 是我的初始步长。我需要两个步长:粗一个和一个细一个,这是代码:h_coarse=h0*M^(-L+1) h_fine=h0*M^(-L) N_fine=round(Tmax/h_fine) N_coarse=round(Tmax/h_coarse) 然后我需要生成一个布朗运动路径,并将更细的网格相加得到粗网格。我想使用矩阵和“应用”功能。这就是我问这个问题的原因。

标签: r


【解决方案1】:

您可以将向量子集为列数的倍数(以便包括所有元素)。这将为向量添加必要数量的NA。然后转换为矩阵。

x = 1:15
matrix(x[1:(4 * ceiling(length(x)/4))], ncol = 4)
#     [,1] [,2] [,3] [,4]
#[1,]    1    5    9   13
#[2,]    2    6   10   14
#[3,]    3    7   11   15
#[4,]    4    8   12   NA

如果您想将 NA 替换为 0,您可以在另一个步骤中使用 is.na() 这样做

【讨论】:

    【解决方案2】:

    我们也可以使用dim<-length<- 来做到这一点

    n <- 4
    n1 <- ceiling(length(x)/n)
    `dim<-`(`length<-`(x, n*n1), c(n1, n))
    #     [,1] [,2] [,3] [,4]
    #[1,]    1    5    9   13
    #[2,]    2    6   10   14
    #[3,]    3    7   11   15
    #[4,]    4    8   12   NA
    

    数据

    x <- 1:15
    

    【讨论】:

    • 有一个错字:应该是 c(n1,n)
    猜你喜欢
    • 2012-02-19
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 2017-06-10
    • 2022-11-12
    • 1970-01-01
    • 2021-12-25
    相关资源
    最近更新 更多