如何获取数据框中每列的平均值

时间:2017-05-13 13:25:04

标签: r

我想获得数据框中每列的平均值,如下所示:

> x <- cbind(x1 = 3, x2 = c(4:1, 2:5))
> x
     x1 x2
[1,]  3  4
[2,]  3  3
[3,]  3  2
[4,]  3  1
[5,]  3  2
[6,]  3  3
[7,]  3  4
[8,]  3  5
> y <- colMeans(x)
> y
x1 x2 
 3  3 

我可以从y获得平均值,但y不是数据框。如何获得数据框的返回值?我需要在cbind上使用y与其他数据框绑定。

2 个答案:

答案 0 :(得分:0)

在你的例子中,x是一个矩阵。你有两个选择:

选项1 - 将x转换为数据帧,然后使用sapply

x<-as.data.frame(cbind(x1 = 3, x2 = c(4:1, 2:5)))
x.df<-sapply(x,FUN=mean)

> x.df
x1 x2 
3  3 

选项2 - 使用apply并将结果转换为数据框

x <- cbind(x1 = 3, x2 = c(4:1, 2:5))
x.df<-as.data.frame(t(apply((x),MARGIN=2,FUN=mean)))

> x.df
x1 x2 
3  3

答案 1 :(得分:0)

我一直在寻找相同的东西,然后找到了如下所示的解决方案

您有一个数字数据集

df <-  data.frame(a = c(623.3,515.2,611.0,729.0,843.25),
                 b = c(1,2,3,4,5),
                 c = c("name1","name2", "name3", "name4", "name5"))

您可以将其应用于某些特定列

mysummary <- function(x){
  funs <- c(mean,sd,mad,IQR)
  lapply(funs,function(f) f(x,na.rm = T))
}

mysummary(df$a)
mysummary(df$b)

或针对所有数据集

  mysummary2 <- function(x){
  if (is.numeric(x)){
    c(mean(x),median(x),sd(x), mad(x), IQR(x))
  }else{ print("pass")}
}

lapply(df,mysummary2)