dplyr summarise_each标准错误函数

fed*_*ppi 4 r dplyr

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

summary <- aspen %>% group_by(year,Spp,CO2) %>% summarise_each(funs(mean,sd))
Run Code Online (Sandbox Code Playgroud)

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

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

akr*_*run 15

你可以做到

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

为了再现性,

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
Run Code Online (Sandbox Code Playgroud)

这是你得到相同std.errorplotrix

 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
Run Code Online (Sandbox Code Playgroud)

  • 非常好!但是如果出现缺失值,就会出现问题。因此,我建议使用 `summarise_each(funs(mean(., na.rm=T), n = sum(!is.na(.)), se = sd(., na.rm=T)/sqrt(sum (!is.na(.)))), hp:drat)`。请注意,函数 `n()` 在计算正确的标准误差时会出错(并且会导致 alpha 错误膨胀),因此应该使用 `sum(!is.na(.))`。如果您想检查自己的数据,只需包含术语`n1=n(), n2 = sum(!is.na(.))`。 (2认同)