рассчитывается по месяцам с условиями - PullRequest
0 голосов
/ 11 июля 2019

Я ищу более эффективный способ сделать следующее.У меня есть monthucket в качестве вспомогательного фрейма данных и df

library(dplyr)
set.seed(123)

monthbucket <- data.frame(
  startmonth = seq(as.Date("2010-01-01"),as.Date("2011-05-01"),by="months"),
  endmonth = seq(as.Date("2010-02-01"),as.Date("2011-06-01"),by="months")-1)


df <- data.frame(
start = sample(seq(as.Date("2010-01-01"),as.Date("2011-01-01"),by="months"),10,replace =T),
end = sample(seq(as.Date("2011-02-01"),as.Date("2011-05-01"),by="months"),10,replace =T),
sex =  sample(c('F','M'),10,replace =T),
group = sample(1:8,10,replace =T))

Я хочу получить значения на основе monthbucket для различных функций в df.Следующий код работает, но становится утомительным, когда у вас есть более 2 уровней на функцию.Например, получить df$group было бы довольно болезненно.


monthbucket %>% 
  group_by(startmonth) %>% 
  summarise(c.active= sum(df$start <=startmonth),
            c.termed= sum(df$end < endmonth),
            active= c.active-c.termed,
            c.active.F= sum(df$start <=startmonth & df$sex=='F'),
            c.termed.F= sum(df$end <endmonth & df$sex =='F'),
            active.F= c.active.F-c.termed.F,
            c.active.M= sum(df$start <=startmonth & df$sex=='M'),
            c.termed.M= sum(df$end < endmonth & df$sex =='M'),
            active.M= c.active.M-c.termed.M
  )

Два вопроса. Во-первых, я использую monthbucket в качестве вспомогательного информационного кадра, чтобы проверить, что записи попадают в промежуток времени, соответствующий времени.Можно ли избавиться от этого лишнего шага.Во-вторых, как я могу изменить свой код, чтобы было проще получать счетчики нескольких уровней на одну функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...