创建平均矩阵的最有效方法

时间:2016-04-19 23:08:11

标签: r matrix

这里非常基本的问题!在10 x 2数据框架上,我想计算每列的平均值,并将结果放在一个新的1 x 2矩阵中。

colmeans计算平均值,但将结果放在2 x 1向量中。 尝试转置向量会出现错误消息"转置错误(AverageX):l必须是列表。"

作为一种解决方法,我创建了一个空的1 x 2矩阵(填充了NA),然后使用rbind将Averages向量与空矩阵合并,然后删除了NA。

它有效,但我打赌可以用两行代码而不是四行代码。有没有人有更好的方法来实现这一目标?非常感谢你的帮助。

df <- data.frame(Price = c(1219, 1218, 1220, 1216, 1217, 1218, 1218, 1207, 1206, 1205), XXX = c( 1218, 1218, 1219, 1218, 1221,  1217 , 1217, 1216, 1219, 1216))

Average <- colMeans(df, na.rm = TRUE) #result is a vector => turn it into a 1xm matrix
AverageMatrix <- matrix(nrow = 1, ncol = 2)
AverageMatrix <- rbind(AverageMatrix, Average)
AverageMatrix<- AverageMatrix[-1, , drop = FALSE]

编辑: @akrun创建平均矩阵并为矩阵的每列创建平均值是类似但技术上不同的问题,因此在我看来这不是重复。这个问题表明我已经知道如何计算矩阵每列的平均值,并且我想要一种更有效的方法将该结果存储为矩阵,这是一个在另一个问题中没有解决的简单问题。

3 个答案:

答案 0 :(得分:3)

你可以通过简单地转换colMeans()的结果来获得一个命名的列平均矩阵,因为(来自help(t)

  

当x是向量时,它被视为一列,即结果是一行矩阵。

t(colMeans(df, na.rm = TRUE))
#       Price    XXX
# [1,] 1214.4 1217.9

答案 1 :(得分:2)

使用data.table,我们可以遍历列并获取mean(将'data.frame'转换为'data.table'(setDT(df)

之后
library(data.table)
setDT(df)[, lapply(.SD, mean, na.rm=TRUE)]
#   Price    XXX
#1: 1214.4 1217.9

答案 2 :(得分:1)

我使用dplyr这样的东西。使用dplyr你可以:

df <- data.frame(Price = c(1219, 1218, 1220, 1216, 1217, 1218, 1218, 1207, 1206, 1205), XXX = c( 1218, 1218, 1219, 1218, 1221,  1217 , 1217, 1216, 1219, 1216))

library(dplyr)
res <- df %>% summarize(mean(Price), mean(XXX))
res
#  mean(Price) mean(XXX)
#1      1214.4    1217.9

编辑:我忘了你想把它当作一个矩阵:

res <- df %>% summarize(mean(Price), mean(XXX)) %>% as.matrix