多个变量的均值和标准偏差

时间:2014-11-07 09:09:34

标签: r mean

这是一个基本问题,但我尚未开始工作。我想计算我的数据帧中相同变量(同时)的平均值,标准差。我使用了函数aggregate()但这需要指定组,在这种情况下我不想要。

数据集如下:

id v1 v2 v3 v4
1  23 34 12 10
2  10 12 39 14

谢谢。

1 个答案:

答案 0 :(得分:0)

假设您希望列meansdv1:v4。 使用base R

 f1 <- function(x,...){c(mean(x,...), sd(x))}
 apply(df[,-1],2, f1, na.rm=TRUE)
#           v1       v2       v3        v4
#[1,] 16.500000 23.00000 25.50000 12.000000
#[2,]  9.192388 15.55635 19.09188  2.828427

 sapply(df[,-1],f1)
 #           v1       v2       v3        v4
 #[1,] 16.500000 23.00000 25.50000 12.000000
 #[2,]  9.192388 15.55635 19.09188  2.828427

 aggregate(.~1, df[,-1], f1, na.rm=TRUE, na.action=NULL)
 #      v1.1      v1.2     v2.1     v2.2     v3.1     v3.2      v4.1      v4.2
 #1 16.500000  9.192388 23.00000 15.55635 25.50000 19.09188 12.000000  2.828427

或者

 library(dplyr)
 summarise_each(df,funs(mean=mean(., na.rm=TRUE), sd), starts_with("v"))
 #  v1_mean v2_mean v3_mean v4_mean    v1_sd    v2_sd    v3_sd    v4_sd
 #1    16.5      23    25.5      12 9.192388 15.55635 19.09188 2.828427

或使用data.table

library(data.table)
setDT(df)[,lapply(.SD, function(x) c(mean(x, na.rm=TRUE), sd(x))),
                                .SDcols=paste0('v', 1:4)]
#          v1       v2       v3        v4
#1: 16.500000 23.00000 25.50000 12.000000
#2:  9.192388 15.55635 19.09188  2.828427

数据

df <- structure(list(id = 1:2, v1 = c(23L, 10L), v2 = c(34L, 12L), 
v3 = c(12L, 39L), v4 = c(10L, 14L)), .Names = c("id", "v1", 
"v2", "v3", "v4"), class = "data.frame", row.names = c(NA, -2L))