编写函数来计算R中数据帧中列的平均值

时间:2017-03-28 02:48:24

标签: r

我必须通过编写函数然后应用它来计算数据框中列的平均值。我理解这对于meanapply很容易,但我需要编写自己的函数。我做了很多尝试,但似乎无法做到这一点。以下是我的3次尝试。我是R的初学者。我非常感谢任何建议。

mean_fun<-function(x){
  mean_c[i]= sum(x[1:dim(x)],na.rm=TRUE)/length(x[1:dim(x)])
  return(mean_c[i])
}


mean_fun<-function(x){
  for( i in 1:ncol(x)){
    s=sum(x[1:i],na.rm=TRUE)
    l=dim(x[1:i])
    mean_c=s/l
    return (mean_c)
  }


mean_fun<-function(x){
  x=rbind(x,newrow)
  for(i in 1:ncol(x)){
    x[newbottomrownumber,i]=sum[i]/length[i]}
  return(x[1303,])
}

3 个答案:

答案 0 :(得分:4)

假设数据框中的所有列都是数字,这里是第一个函数的调整,其中x是向量(mydataframe中的一列)。

mean_fun<-function(x){
    mean_c= sum(x,na.rm=TRUE)/length(!is.na(x))
    return(mean_c)
}

apply(mydataframe,2,mean_fun)

答案 1 :(得分:3)

这是一个稍微修改你的第二次尝试的例子

mean_fun<-function(x){
    mean_c = numeric(0)
    for( i in 1:ncol(x)){
        s = sum(x[,i], na.rm=TRUE)
        l = length(x[,i][is.na(x[,i]) == FALSE])
        mean_c[i] = s/l
    }
    return (mean_c)
}

<强> USAGE

mean_fun(mtcars)
# [1]  20.090625   6.187500 230.721875 146.687500   3.596563   3.217250  17.848750   0.437500   0.406250
#[10]   3.687500   2.812500

答案 2 :(得分:0)

为什么不使用dplyr

您可以使用

获取data.frame中所有列的均值
summarise_each(funs(mean))

如果我们将其应用于mtcars

library(dplyr)
mtcars %>% summarise_each(funs(mean))

#       mpg    cyl     disp       hp     drat      wt     qsec     vs      am   gear   carb
#1 20.09062 6.1875 230.7219 146.6875 3.596563 3.21725 17.84875 0.4375 0.40625 3.6875 2.8125