Агрегирование переменных в зависимости от даты - PullRequest
0 голосов
/ 30 мая 2018

У меня большой набор данных с большим количеством точек дат и точек данных.См. Здесь минимальный пример.

Date     x     y     id     update-size
01.01    1     1      1
01.02    2     3      1     2345
01.03    4     2      1
01.01    5     7      2     3654
01.02    2     6      2
01.03    3     2      2     4789

Я хочу объединить данные (x, y) между каждым обновлением программного обеспечения.Проще говоря: если есть обновление, возьмите все данные между этим обновлением и последним обновлением (или первой точкой данных) и объедините их.

Заранее спасибо.

1 Ответ

0 голосов
/ 30 мая 2018

Такие функции, как aggregate и tapply, а также инструменты в plyr, dplyr и связанные с ними пакеты будут выполнять агрегирование за вас.Но все они ожидают единственную переменную, которая определяет группы для агрегирования.

Для вашего простого примера вы можете создать переменную группировки, используя такой код:

group <- cumsum(!is.na(mydata[['update-size']])

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

Пример:

> mydata <- data.frame(Date=c('01.01','01.02','01.03','01.01','01.02','01.03'),
+                    x=c(1,2,4,5,2,5),
+                    y=c(1,3,2,7,6,2),
+                    id=c(1,1,1,2,2,2),
+                    update.size =c(NA,2345,NA,2345,NA,4789)
+ )
> 
> group <- cumsum(!is.na(mydata$update.size))
> 
> # above aggregates with values after update
> # this line changes to aggregate with before
> group[ !is.na(mydata$update.size) ] <- group[ !is.na(mydata$update.size) ] -1
> 
> 
> aggregate(mydata[,2:4], list(group), FUN=sum)
  Group.1 x y id
1       0 3 4  2
2       1 9 9  3
3       2 7 8  4
> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...