2017-02-11 17 views
0

У меня есть CSV-файл весов, каждый день принимаемый в течение шести месяцев (август 2016 года - январь 2017 года) на каждый день. Я хотел бы построить ящик для каждого месяца, который в основном отображает сводку() данных за каждый месяц. Я хотел бы использовать ggplot2 для него, поскольку он выглядит намного красивее. Я ловил рыбу для решения и придумывал много, но ничего, что, кажется, решает то, что я хочу.Boxplot данных CSV с ggplot2

Голову и резюме данных:

> wts <- read.csv('weights.csv', header=T, sep=',') 
> head(wts) 
    August.2016 September.2016 October.2016 November.2016 December.2016 January.2016 
1  254.2   250.0  248.2   245.8   245.6  244.4 
2  252.6   249.2  248.6   246.4   246.0  245.0 
3  251.8   250.6  249.2   248.0   246.4  244.3 
4  253.2   252.4  249.8   247.5   246.0  243.6 
5  252.2   250.6  248.8   247.0   246.0  242.6 
6  254.0   251.0  247.8   247.6   246.0  242.0 
> summary(wts) 
    August.2016 September.2016 October.2016 November.2016 December.2016 January.2016 
Min. :249.6 Min. :245.6 Min. :245.4 Min. :244.2 Min. :243.4 Min. :241.6 
1st Qu.:252.2 1st Qu.:248.3 1st Qu.:246.7 1st Qu.:246.2 1st Qu.:244.8 1st Qu.:242.9 
Median :252.8 Median :249.2 Median :247.8 Median :246.6 Median :245.6 Median :243.6 
Mean :252.7 Mean :249.1 Mean :247.6 Mean :246.7 Mean :245.3 Mean :243.5 
3rd Qu.:253.6 3rd Qu.:250.0 3rd Qu.:248.2 3rd Qu.:247.2 3rd Qu.:246.0 3rd Qu.:244.3 
Max. :255.2 Max. :252.4 Max. :249.8 Max. :248.6 Max. :247.0 Max. :245.0 
       NA's :1      NA's :1      NA's :1 

Из того, что я собрал мне нужно изменить данные в пути, что ggplot любит, но я не знаю, как это сделать. Я также хотел бы подчеркнуть среднее (с фактическим числом) на коробке, если это возможно. Могу ли я получить представление о том, как это сделать?

Благодаря

ответ

1

Чтобы остаться в той же парадигме, вы можете использовать gather() из tidyr пакета, чтобы изменить свои данные в длинном формате, и вставьте результат в ggplot(). Чтобы добавить текст с изображением среднего значения, вы можете использовать stat_summary() с геометром "text" и функцией mean, применяемой к переменной value.

library(tidyr) 
library(ggplot2) 

ggplot(gather(wts, factor_key = TRUE), 
    aes(key, value)) + 
    geom_boxplot() + 
    stat_summary(aes(label = ..y..), 
       fun.y = function(x) round(mean(x), 2), 
       geom = "text", 
       size = 3, 
       color = "red") 

enter image description here

+0

Спасибо. Я получил предупреждение об удалении 3 строк, содержащих не конечные значения. Будет ли это соответствовать значениям NA в течение месяцев с 30 днями (31-й день)? Кроме того, временная шкала не заказана. В вашем примере также, к декабрю 2016 года следует август. Есть ли что-то вроде упорядоченного метода, который я мог бы использовать? – shaun

+1

Я понял порядок. Заказ можно сохранить с помощью collect (factor_key = TRUE). Я также заполнил данные NA средним весом столбца (в самом csv, а не в R). Мне нужно выяснить, как округлить среднее значение до двух значащих цифр. – shaun

+0

см. Обновление @shaun – mtoto