Чтобы выбрать «Идентификаторы», преобразуйте «year.quarter» в zoo::year.qtr
, возьмите разницу между последовательными значениями по группам, проверьте, все ли различия равны 0,25 *.
library(zoo)
tapply(as.yearqtr(as.character(d$year.quarter), format = "%Y%q"), d$Identifer,
FUN = function(x) all(diff(as.numeric(x)) == 0.25))
# 111 112 113
# TRUE FALSE TRUE
Чтобы выбрать соответствующие строки,используйте аналогичную логику с ave
:
d[as.logical(ave(as.yearqtr(as.character(d$year.quarter), format = "%Y%q"), d$Identifer,
FUN = function(x) all(diff(x) == 0.25))), ]
# Identifer year.quarter
# 1 111 201503
# 2 111 201504
# 3 111 201601
# 4 111 201602
# 5 111 201603
# 6 111 201604
# 10 113 201503
# 11 113 201504
# 12 113 201601
* С ?as.yearqtr
:
Класс "yearqtr
" используется для представления квартальных данных.Внутренне он хранит данные как год плюс 0 для квартала 1, 1/4 для квартала 2 и т. Д.
Запись была улучшена благодаря комментариям @ G.Grothendieck.Спасибо!