【问题标题】:R programming - Adding extra column to existing matrixR编程 - 向现有矩阵添加额外的列
【发布时间】:2013-02-05 01:05:30
【问题描述】:

我是 R 编程的初学者,正在尝试向具有 50 列的矩阵添加一列。这个新列将是该行中前 10 个值的平均值。

randomMatrix <- generateMatrix(1,5000,100,50)
randomMatrix51 <- matrix(nrow=100, ncol=1)

for(ctr in 1:ncol(randomMatrix)){  
randomMatrix51.mat[1,ctr]  <- sum(randomMatrix [ctr, 1:10])/10
}

这给出了以下错误

Error in randomMatrix51.mat[1, ctr] <- sum(randomMatrix[ctr, 1:10])/10 :incorrect
number of subscripts on matrix

我试过了

cbind(randomMatrix,sum(randomMatrix [ctr, 1:10])/10)

但它只适用于一行,如果我在循环中使用这个 cbind,所有旧值都会被覆盖。

如何在新列中添加前 10 个值的平均值。除了循环遍历行之外,还有更好的方法吗?

【问题讨论】:

  • 我认为您的矩阵索引方式错误,x[i,j] 指的是行i 和列j。还有,generateMatrix 是从哪里来的?
  • 这解决了部分问题。但是有没有办法向“randomMatrix”添加一个额外的列。如果不是,我必须将 randomMatrix51 绑定到 'randomMatrix'。 generateMatrix 是带参数的函数(下限、上限、行数、列)。它是 R 标准库中的一个内置函数。

标签: r statistics


【解决方案1】:

砰!

a <- matrix(1:5000, nrow=100)
a <- cbind(a,apply(a[,1:10],1,mean))

然而,在大型数据集上,它使用起来更快(并且可以说更简单):

cbind(a, rowMeans(a[,1:10]) )

【讨论】:

    【解决方案2】:

    我觉得你想多了。

    a <- matrix(1:5000, nrow=100)
    a <- transform(a,  first10ave = colMeans(a[1:10,]))
    

    【讨论】:

    • 这为新列的每一行提供相同的值,因为没有为每一行计算 mean(a[1:10,])。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2014-07-06
    相关资源
    最近更新 更多