dplyr summarise_each 标准误差函数

dplyr summarise_each standard error function

我可以使用以下方法总结我的数据并计算平均值和标准差值:

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())))

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

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

你可以做到

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

@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)

n2se2 是正确的值。