Мне нужно сгруппировать, суммируя некоторые данные, в которых первый столбец содержит информацию о годах. Я пытаюсь это сделать, но получаю ошибки.
Пример данных:
mydata = data.frame(Year = c(2001:2018), Dat = c(1:18))
Я хочу иметь в виду совокупные средние значения «Dat», но группу по «году», разделенную на группы по 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")
Но это выдает ошибку, которую я не могу понять.
Error in n(Year) : unused argument (Year)
Что я делаю неправильно? или есть альтернатива ему?
С 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")
Я бы сохранил изменение формы данных и построение графика явным
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")
Однако, используя stat_summary
, вы можете сделать
ggplot(mydata) +
aes(x = ceiling((1:nrow(mydata))/ 4), y = Dat) +
stat_summary(fun.y = "mean",geom = "bar")