如何获得不同组的平均值(在这种情况下为年份)

时间:2018-09-28 20:32:07

标签: r

我想制作一个数据框的平均值,标准偏差,最大值和最小值的表格,直到知道我已使用此代码实现了该表格。

dt<-data.frame(nuevabase$años_de_educacion,group=factor(nuevabase$año))

abs<-ddply(dt,~ group,summarise,mean=mean(nuevabase$años_de_educacion,na.rm=TRUE)
           ,sd=sd(nuevabase$años_de_educacion,na.rm=TRUE)
           ,max=max(nuevabase$años_de_educacion,na.rm=TRUE)
           ,min=min(nuevabase$años_de_educacion,na.rm=TRUE))

但是问题是表格给了我全年的平均值,而我只想要每年的平均值,我该如何改变呢? enter image description here

2 个答案:

答案 0 :(得分:2)

那又怎么样:由于您尚未发布数据,因此这里是著名的diamonds数据集的示例。切割就像您的group,深度像años_de_educacion

 library(dplyr)
 diamonds %>% group_by(cut) %>% summarise(
    avg = mean(depth),
    stdev = sd(depth),
    minval = min(depth),
    maxval = max(depth))

所以在您的情况下:

dt<-data.frame(años_de_educacion =nuevabase$años_de_educacion,
               group=factor(nuevabase$año))

 abs<- dt %>% group_by(group) %>% summarise(
    avg = mean(años_de_educacion),
    stdev = sd(años_de_educacion),
    minval = min(años_de_educacion),
    maxval = max(años_de_educacion))

答案 1 :(得分:1)

在基数R中,您可以使用aggregate执行此操作。我将使用内置数据集iris举例。

agg <- aggregate(Sepal.Length ~ Species, iris, function(x){
  c(mean = mean(x), sd = sd(x), min = min(x), max = max(x))
})

cbind(agg[1], agg[[2]])
#     Species  mean        sd min max
#1     setosa 5.006 0.3524897 4.3 5.8
#2 versicolor 5.936 0.5161711 4.9 7.0
#3  virginica 6.588 0.6358796 4.9 7.9

下面以(好)用户@s_t为例,数​​据集的代码应为

agg <- aggregate(años_de_educacion ~ año, nuevabase, function(x){
  c(mean = mean(x), sd = sd(x), min = min(x), max = max(x))
})

然后是相同的cbind指令。
请注意,您无需显式强制año来对factor进行分类,R足够聪明,可以单独执行。