Как получить средние значения разных групп (например, лет в этом случае) - PullRequest
0 голосов
/ 28 сентября 2018

Я хочу составить таблицу средних значений, стандартного отклонения, максимума и минимума для фрейма данных, пока не узнаю, что я достиг этой таблицы с этим кодом.

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 голосов
/ 28 сентября 2018

В базе 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 достаточно умен, чтобы сделать это самостоятельно.

0 голосов
/ 28 сентября 2018

Как насчет этого: из-за того, что вы не опубликовали свои данные, вот пример со знаменитым набором данных 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...