【问题标题】:How to get mean value of each columns in a data frame如何获取数据框中每列的平均值
【发布时间】:2017-10-12 17:09:00
【问题描述】:

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

> 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 不是数据框。如何获取数据框的返回值?我需要在y 上使用cbind 来绑定其他数据框。

【问题讨论】:

  • data.frame(colMeans(x)) 返回一列中的所有数据。怎样才能连续成功?
  • 您可以使用tidyversex %&gt;% as.tibble %&gt;% summarise_all(mean)

标签: r


【解决方案1】:

在您的示例中,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 - 在数据框中使用应用和转换结果

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

【讨论】:

    【解决方案2】:

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

    你有一个数字数据集

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-16
      • 2019-12-06
      • 1970-01-01
      • 2023-02-09
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      相关资源
      最近更新 更多