У меня есть данные, которые выглядят следующим образом:
> head(z, 10)
date year long lat
1 01/18/2017 2017 -92.48474 29.76465
2 01/22/2017 2017 -93.11126 29.83961
3 12/28/2013 2013 -91.30789 29.41938
4 01/08/2014 2014 -93.09949 29.80632
5 01/03/2014 2014 -90.55703 29.44535
6 12/31/2013 2013 -90.39836 29.57244
7 2013 -93.56322 30.30028
8 11/24/2013 2013 -93.45932 29.78530
9 11/19/1994 1994 -93.58333 29.75000
10 11/15/2013 2013 -89.16171 29.45222
В некоторые дни существует несколько записей, в то время как некоторые записи не имеют даты. Те, у кого нет даты, мне не интересны. Что я хочу знать, так это то, сколько записей существует на каждую дату и вставить пропущенные дни, когда ни одна запись не была создана, поэтому для каждого дня года существует запись для каждого дня. год независимо от того, были ли записаны данные, например:
> head(z2)
m_d y_2017 y_2016 y_2015 y_2014 y_2013
1 01-02 16 15 0 29 9
2 01-03 0 38 25 10 3
3 01-04 13 20 14 5 7
4 01-05 19 0 3 0 16
5 01-06 34 25 29 33 24
6 01-07 3 10 5 34 7
Используя функцию агрегирования, я смог выяснить, сколько записей было за каждый день.
> #create a value for the aggregate function to sum
z$count<-rep(1, length(z$year))
m<-aggregate(count ~ date, data = z, sum)
> head(m)
date count
1 308
2 01/01/1980 1
3 01/01/1985 1
4 01/01/1995 1
5 01/01/1996 2
6 01/01/1997 1
Я понятия не имею, как перейти из этой таблицы, которая является необходимой мне информацией, в формат, который я хочу, находчивым способом. Я мог бы вручную установить подгруппу по годам и объединить данные каждого года с полным набором месяцев / дней для этого года, а затем создать новый df
, используя все разные годы, но это кажется чрезмерно громоздким и повторяющимся, так как данные у меня идут назад в 1980. Кто-нибудь знает эффективный способ реорганизации этих данных в вышеуказанный формат?