Функция R ведет себя иначе, чем код, введенный построчно - PullRequest
0 голосов
/ 13 июня 2018

Я в растерянности.Гугл подвел меня, потому что я не уверен, что знаю правильный вопрос.

У меня есть фрейм данных (df1), и моя цель состоит в том, чтобы использовать функцию для получения скользящей средней с помощьюcast :: ma.

Вот стр. (Df1)

'data.frame':   934334 obs. of  6 variables:
 $ clname  : chr   ...
 $ dos     : Date, format: "2011-10-05" ...
 $ subpCode: chr  
 $ ch1     : chr  "
 $ prov    : chr  
 $ ledger  : chr  

У меня есть функция, которую я пытаюсь написать.

process <- function(df, y, sub, ...) {


 prog <-   df %>%

    filter(subpCode == sub) %>%

    group_by(dos, subpCode) %>%

    summarise(services = n())

 prog$count_ts <- ts(prog[ , c('services')])


}

Проблема заключается в том, что при запуске функциимой окончательный результат - объект данных 1x1798, и это всего лишь временной ряд.Если я запускаю код построчно, я получаю то, что мне нужно, но моя функция, которая гипотетически делает то же самое, не будет работать.

Вот мой желаемый результат

Classes ‘grouped_df’, ‘tbl_df’, ‘tbl’ and 'data.frame': 1718 obs. of  4 variables:
 $ dos     : Date, format: "2010-09-21" "2010-11-18" "2010-11-19" "2010-11-30" ...
 $ subpCode: chr  "CII  " "CII  " "CII  " "CII  " ...
 $ services: int  1 1 2 2 2 2 1 2 1 3 ...
 $ count_ts: Time-Series [1:1718, 1] from 1 to 1718: 1 1 2 2 2 2 1 2 1 3 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr "services"
 - attr(*, "vars")= chr "dos"
 - attr(*, "drop")= logi TRU

И воткод, который его получает.

CII <-   df1 %>%
  filter(subpCode == "CII  ") %>%
  group_by(dos, subpCode) %>%
  summarise(services = n())

CII$count_ts <- ts(CII[ , c('services')])

Может ли кто-нибудь указать мне правильное направление.Я исчерпал свои обычные места.

Спасибо!

1 Ответ

0 голосов
/ 13 июня 2018

Следуя виньетке, указанной @CalumYou, вы должны использовать что-то вроде этого:

process <- function(df, sub) {
   ## Enquoting sub
   sub <- enquo(sub)

   ## Piping stuff
   prog <-   df %>%
      filter(!! subpCode == sub) %>%
      group_by(dos, subpCode) %>%
      summarise(services = n())

   prog$count_ts <- ts(prog[ , c('services')])

   ## Returning the prog object
   return(prog)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...