dplyr summarise_each标准错误函数

时间:2015-04-23 11:17:45

标签: r dplyr

我可以使用以下方法汇总我的数据并计算平均值和sd值:

summary <- aspen %>% group_by(year,Spp,CO2) %>% summarise_each(funs(mean,sd))

但是,我也无法计算标准误差。我试过这个没有成功:

summary <- aspen %>% group_by(year,Spp,CO2) %>% summarise_each(funs(mean,sd,se=sd/sqrt(n())))

3 个答案:

答案 0 :(得分:15)

你可以做到

library(dplyr)
aspen %>% 
    group_by(year,Spp,CO2) %>%
    summarise_each(funs(mean,sd,se=sd(.)/sqrt(n())))

为了重现性,

data(mtcars)
grpMt <- mtcars %>%
          group_by(gear, carb)

grpMt %>%
     summarise_each(funs(mean, sd, se=sd(.)/sqrt(n())), hp:drat) %>% 
     slice(1:2)
#   gear carb hp_mean drat_mean     hp_sd   drat_sd     hp_se    drat_se
#1    3    1   104.0    3.1800  6.557439 0.4779121  3.785939 0.27592269
#2    3    2   162.5    3.0350 14.433757 0.1862794  7.216878 0.09313968
#3    4    1    72.5    4.0575 13.674794 0.1532699  6.837397 0.07663496
#4    4    2    79.5    4.1625 26.913441 0.5397144 13.456721 0.26985722
#5    5    2   102.0    4.1000 15.556349 0.4666905 11.000000 0.33000000
#6    5    4   264.0    4.2200        NA        NA        NA         NA

std.error

中的plotrix相同
 library(plotrix)
 grpMt %>% 
    summarise_each(funs(mean, sd, se=std.error), hp:drat) %>% 
    slice(1:2)
 #  gear carb hp_mean drat_mean     hp_sd   drat_sd     hp_se    drat_se
 #1    3    1   104.0    3.1800  6.557439 0.4779121  3.785939 0.27592269
 #2    3    2   162.5    3.0350 14.433757 0.1862794  7.216878 0.09313968
 #3    4    1    72.5    4.0575 13.674794 0.1532699  6.837397 0.07663496
 #4    4    2    79.5    4.1625 26.913441 0.5397144 13.456721 0.26985722
 #5    5    2   102.0    4.1000 15.556349 0.4666905 11.000000 0.33000000
 #6    5    4   264.0    4.2200        NA        NA        NA         NA

答案 1 :(得分:2)

您可以使用std.error包中的plotrix函数或首先定义您自己的函数,并将该函数名称作为参数传递。

    library(plotrix)
    summary <- aspen %>% group_by(year,Spp,CO2) %>% 
summarise_each(funs(mean,sd,std.error)))

答案 2 :(得分:2)

@akrun的重要附加组件:

如果可能出现缺失值(NA),则应使用:

summarise_each(funs(mean(., na.rm=T), n = sum(!is.na(.)), se = sd(., na.rm=T)/sqrt(sum(!is.na(.)))), hp:drat)

很遗憾,n()函数不会删除缺失值,因此除了使用na.rm=T之外,我们还需要将n()替换为sum(!is.na(.))

关于我自己的一些数据如何出错的插图:

summarise_each(funs( mean(., na.rm=T), n1=n(), n2=sum(!is.na(.)), se1=sd(., na.rm=T)/sqrt(n()), se2=sd(., na.rm=T)/sqrt(sum(!is.na(.)))), rating)

dplyr n() includes NAs

n2se2是正确的值。