Команды dplyr в UDF - PullRequest
       5

Команды dplyr в UDF

0 голосов
/ 09 июля 2020

Мне нужно обернуть приведенную ниже команду dplyr в пользовательскую функцию R.

Она должна иметь 4 параметра -

  • filter - любое условие фильтрации в filter ()
  • шкалы --- любая функция из пакета шкал (не только процентов)
  • переменная для выбора для мутации
  • df

Код -

val <- Cash_Collateral %>% dplyr::filter(Collateral == 'Non-Residential') %>% 
      mutate(LRF_Net_ActualVsForecast = scales::percent(LRF_Net_ActualVsForecast, accuracy = 0.1)) %>% 
      select(LRF_Net_ActualVsForecast) %>% pull()

1 Ответ

0 голосов
/ 09 июля 2020

Вы можете сделать это в базе R:

f <- function(df, filter, var, FUN, ...)
{
  filter <- as.list(match.call())$filter
  ss <- eval(filter, envir = df, enclos = parent.frame())
  FUN(subset(df, ss)[[deparse(substitute(var))]], ...)
}

Например:

df <- data.frame(a = 1:5, b = letters[1:5])
df
#>   a b
#> 1 1 a
#> 2 2 b
#> 3 3 c
#> 4 4 d
#> 5 5 e

df %>% f(filter = a > 1 & a < 5, var = b, FUN = paste, collapse = " ")
#> [1] "b c d"
...