计算 R 中矩阵每一列的平均值
Posted
技术标签:
【中文标题】计算 R 中矩阵每一列的平均值【英文标题】:calculate the mean for each column of a matrix in R 【发布时间】:2014-03-15 12:05:42 【问题描述】:我正在 R 工作室研究 R。 我需要计算数据框每一列的平均值。
cluster1 // 5 by 4 data frame
mean(cluster1) //
我明白了:
Warning message:
In mean.default(cluster1) :
argument is not numeric or logical: returning NA
但我可以使用
mean(cluster1[[1]])
获取第一列的平均值。
如何获取所有列的均值?
任何帮助将不胜感激。
【问题讨论】:
有用的自助工具包括内置的apropos
(例如apropos('mean')
)和sos
包中的findFn
。
还有this great reference card。
【参考方案1】:
你可以使用colMeans
:
### Sample data
set.seed(1)
m <- data.frame(matrix(sample(100, 20, replace = TRUE), ncol = 4))
### Your error
mean(m)
# [1] NA
# Warning message:
# In mean.default(m) : argument is not numeric or logical: returning NA
### The result using `colMeans`
colMeans(m)
# X1 X2 X3 X4
# 47.0 64.4 44.8 67.8
【讨论】:
如果我们要计算median
,或者min
,max
怎么办?我们有类似colMedians
的东西吗?
@AnhTriet,可以考虑"matrixStats" package?
@TrietDoan 如果您有一个数据框并且想要计算中位数、标准差等,请使用 apply:apply(df, 2, median)
。这里的“2”表示按列。见这里:***.com/a/18047916/5824031【参考方案2】:
您可以使用“应用”来运行函数或矩阵或数字数据框的行或列:
cluster1 <- data.frame(a=1:5, b=11:15, c=21:25, d=31:35)
apply(cluster1,2,mean) # applies function 'mean' to 2nd dimension (columns)
apply(cluster1,1,mean) # applies function to 1st dimension (rows)
sapply(cluster1, mean) # also takes mean of columns, treating data frame like list of vectors
【讨论】:
如果你改用colMeans(m)
和rowMeans(m)
会更好。比apply(cluster1,1,mean)
优化更快【参考方案3】:
如果您有 NA:
sapply(data, mean, na.rm = T) # Returns a vector (with names)
lapply(data, mean, na.rm = T) # Returns a list
请记住,“平均值”需要数字数据。如果您有混合类数据,请使用:
numdata<-data[sapply(data, is.numeric)]
sapply(numdata, mean, na.rm = T) # Returns a vector
lapply(numdata, mean, na.rm = T) # Returns a list
【讨论】:
【参考方案4】:另一种方法是使用purrr包
# example data like what is said above
@A 手推车和马海毛
set.seed(1)
m <- data.frame(matrix(sample(100, 20, replace = TRUE), ncol = 4))
library(purrr)
means <- map_dbl(m, mean)
> means
# X1 X2 X3 X4
#47.0 64.4 44.8 67.8
【讨论】:
【参考方案5】:你可以试试这个:
mean(as.matrix(cluster1))
【讨论】:
【参考方案6】:试试吧!还可以计算NA的数据!
df <- data.frame(a1=1:10, a2=11:20)
df %>% summarise_each(funs( mean( .,na.rm = TRUE)))
# a1 a2
# 5.5 15.5
【讨论】:
【参考方案7】:class(mtcars)
my.mean <- unlist(lapply(mtcars, mean)); my.mean
mpg cyl disp hp drat wt qsec vs
20.090625 6.187500 230.721875 146.687500 3.596563 3.217250 17.848750 0.437500
am gear carb
0.406250 3.687500 2.812500
【讨论】:
【参考方案8】:colMeans(A, na.rm = FALSE, dims = 1)
https://stat.ethz.ch/R-manual/R-devel/library/base/html/colSums.html
这是在基类中,所以不需要库。
第一个答案看起来像是使用分析库中的 colMeans,这在 R 版本 4.0.2 中不可用。
【讨论】:
【参考方案9】:为了多样性:另一种方法是将向量函数转换为可处理数据的函数
使用plyr::colwise()
帧
set.seed(1)
m <- data.frame(matrix(sample(100, 20, replace = TRUE), ncol = 4))
plyr::colwise(mean)(m)
# X1 X2 X3 X4
# 1 47 64.4 44.8 67.8
【讨论】:
以上是关于计算 R 中矩阵每一列的平均值的主要内容,如果未能解决你的问题,请参考以下文章