Группировать по фиксированному номеру в переменной, содержащей годы - PullRequest
0 голосов
/ 08 апреля 2019

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

Пример данных:

mydata = data.frame(Year = c(2001:2018), Dat = c(1:18))

Я хочу иметь в виду совокупные средства "Dat", но группировать по "Year", разделенному на группы4 (т.е. 2001, 2002, 2003 и 2004 = группа 1 и т. Д.).

Что я пытаюсь:

ggplot(mydata, aes(x=group_by((n=n(Year)/4)), y=Dat)) + stat_summary(fun.y="mean", geom="bar")

Но это ошибка, которую я не могу понять.

Ошибка в n (Год): неиспользованный аргумент (Год)

Что я делаю не так?или есть альтернатива этому?

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Я бы сохранял явное изменение формы данных и графиков

library(dplyr)
library(ggplot2)

mydata %>%
   group_by(group = ceiling((1:nrow(mydata)/ 4))) %>%
   summarise(mean = mean(Dat)) %>%
   ggplot() + 
   aes(group, mean) + 
   geom_bar(stat = "identity")

enter image description here


Однако, используя stat_summary, вы могли бы сделать

ggplot(mydata) + 
     aes(x = ceiling((1:nrow(mydata))/ 4), y = Dat) + 
     stat_summary(fun.y = "mean",geom = "bar")
1 голос
/ 08 апреля 2019

С dplyr вы можете попробовать:

mydata %>%
 group_by(group = gl(ceiling(n() / 4), 4, length = n())) %>%
 summarise(Dat = mean(Dat))

  group   Dat
  <fct> <dbl>
1 1       2.5
2 2       6.5
3 3      10.5
4 4      14.5
5 5      17.5

Просто группировка:

mydata %>%
 group_by(group = gl(ceiling(n() / 4), 4, length = n())) 

    Year   Dat group
   <int> <int> <fct>
 1  2001     1 1    
 2  2002     2 1    
 3  2003     3 1    
 4  2004     4 1    
 5  2005     5 2    
 6  2006     6 2    
 7  2007     7 2    
 8  2008     8 2    
 9  2009     9 3    
10  2010    10 3    
11  2011    11 3    
12  2012    12 3    
13  2013    13 4    
14  2014    14 4    
15  2015    15 4    
16  2016    16 4    
17  2017    17 5    
18  2018    18 5

И чтобы получить график (заимствуя идею черчения от @Ronak Shah):

mydata %>%
 group_by(group = gl(ceiling(n() / 4), 4, length = n())) %>%
 summarise(Dat = mean(Dat)) %>%
 ggplot(aes(group, Dat)) + 
 geom_bar(stat = "identity")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...