r - UDF 中的 dplyr 命令
问题描述
我需要将以下 dplyr 命令包装在 R 用户定义的函数中。
它应该有 4 个参数 -
- filter——filter()中的任何过滤条件
- scales --- scales(不仅仅是百分比)包中的任何函数
- 选择变异的变量
- 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()
解决方案
您可以在基础 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"
推荐阅读
- docusignapi - DocuSign - 如果我们的客户为 DocuSign 启用了 SSO,如何处理
- c++ - 什么可能导致Ncurses混乱中的坐标
- python - 关于将 sum() 与 zip() 结合起来的问题
- asp.net-mvc - Azure App Service 授权/easy auth 与 ASP.NET Forms auth 冲突
- angular - 如何使用 window.opener 从 Angular 8 中的子窗口获取父组件数据
- javascript - 在vue中上传和处理excel文件
- php - Stripe PaymentIntent PHP client_secret 解析为 null
- discord.js - 重写命令处理程序
- laravel - 调用未定义的方法 Illuminate\Database\Query\Builder::firstOrFail()
- flutter - 如何在 Flutter Flame 游戏引擎中停止精灵动画