用于循环列表的自定义函数

2024-01-03

我有一个有效的自定义函数,但不确定如何让它与输入列表循环。看起来我需要了解 apply() 等,但我对当前的设置还不太了解。该函数使用 rollapply() 查找给定时间范围内的最大指标。

library(zoo)
library(dplyr)

# Data
set.seed(1)
df <- tibble(player = rep(LETTERS[1:2], each = 10),
             minute = rep(1:10, times = 2),
             tdc = sample(100:200,size = 20),
             sumad = sample(1:10, size = 20, replace = TRUE))

# Custom function
x_min_roll <- function(df, metric, n_minutes, fun){
  metric <- ensym(metric)
  newname <- glue::glue("{rlang::as_string(metric)}_x{as.character(n_minutes)}")
  df %>% 
    # dynamically create new column name based on input
    mutate("{newname}" := rollapply(!!metric, n_minutes, fun, align='left', fill=NA)) %>% 
    group_by(player) %>% 
    slice_max(.data[[newname]]) %>% 
    select(player, .data[[newname]])
}

# This works
df %>% 
  x_min_roll(metric = tdc, n_minutes = 2, fun = sum)

# A tibble: 2 x 2
# Groups:   player [2]
  player tdc_x2
  <chr>   <int>
1 A         339
2 B         380

我希望能够做到这一点:

metric_list <- c('tdc', 'sumad')
minutes_list <- c(2,5)

df %>% 
  x_min_roll(metric = metric_list, n_minutes = minutes_list, fun = sum) %>% 
  # maybe a few more steps here.... to get this

# A tibble: 2 x 5
  player tdc_x2 tdc_x5 sumad_x2 sumad_x5
  <chr>   <dbl>  <dbl>    <dbl>    <dbl>
1 A         339    793       20       36
2 B         380    866       19       41

我们可以用map2循环两个向量的相应元素

library(purrr)
library(dplyr)
map2(metric_list, minutes_list, 
  ~ df %>%
    x_min_roll(metric = !!.x, n_minutes = .y, fun = sum))

-output

[[1]]
# A tibble: 2 × 2
# Groups:   player [2]
  player tdc_x2
  <chr>   <int>
1 A         339
2 B         380

[[2]]
# A tibble: 3 × 2
# Groups:   player [2]
  player sumad_x5
  <chr>     <int>
1 A            36
2 B            41
3 B            41

编辑:基于@Onyambu的评论


如果我们想要每个组合,那么使用crossing创建组合

library(tidyr)
crossing(metric_list, minutes_list) %>% 
 pmap(~ df %>% 
      x_min_roll(metric = !!.x, n_minutes = .y, fun = sum))

根据OP的评论,如果我们想合并数据集

crossing(metric_list, minutes_list) %>% 
 pmap(~ df %>% x_min_roll(metric = !!.x, n_minutes = .y, fun = sum)) %>%
    reduce(inner_join, by = 'player')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于循环列表的自定义函数 的相关文章

  • 如何从 data.frame 中删除列?

    不是 你怎么 但更多的是 你怎么 如果有人给你一个包含 200 列的文件 并且你想将其减少到分析所需的少数列 你会如何做呢 一种解决方案是否比另一种解决方案更有优势 假设我们有一个包含列 col1 col2 到 col200 的数据框 如果
  • 使用 data.table 对分组数据进行插值

    这是我最初发布的问题的延续http r 789695 n4 nabble com subset Between data table list and single data table object tp4673202 html http
  • 有没有一种简单的方法可以在 R 的 igraph 中按度数对网络节点进行着色?

    使用igraphR 包 我想按度数对网络节点进行着色 颜色应代表渐变 例如从蓝色到红色 或从黄色到红色 从网络中观察到的最低程度到最高程度 我找到了一个可行的解决方案 https stackoverflow com questions 40
  • 合并的 xts 对象未对齐

    请尝试以下代码 library quantmod getSymbols SPY from 1950 01 01 SPY lt to monthly SPY temp lt xts Cl SPY index SPY 您将获得一个xts具有相同
  • 使用 ggplot 2 使用线条或线段将堆栈条形图与多个组连接起来

    我正在对一些患有某种疾病的患者进行一项研究 并在 3 个不同的时间点使用顺序量表评估功能状态 我想在这些时间点的堆叠条形图中连接多个组 我查看了这些主题 但尚未使用这些建议使其发挥作用 如何将线条放置在堆积条形图的边缘 https stac
  • 如何对 lm() 中的一系列值进行子集化

    lm 的帮助文件没有涉及子集参数的语法 我不知道如何让它找到最适合我的数据集的一部分的线 这个问题是类似的 但我无法使用它解决我的特定问题 子集参数在 lm 函数中如何工作 https stackoverflow com questions
  • 删除第一次出现某个值后的行

    我有以下 df df lt data frame var1 c 1 2 2 3 4 5 5 6 7 8 9 var2 c a b c d e f g h i j k 我想在达到前 5 var1 后进行过滤 所以结果应该是 var1 var2
  • 根据一个或多个下拉选项创建具有不同类型线型的折线图

    在下面闪亮的应用程序中 我尝试根据侧边栏中的下拉选择创建点线图 我已成功在选择一个指标时创建折线图 但无法选择 2 个指标 为了x and y我想要一个solid线 对于x1 and y1我想要一个dashed线和对于x2 and y2一条
  • 使用 lapply、Reduce 和 union 折叠 data.table 中的行

    我有一个 data table 示例 JACcar 它应该使用下面的代码根据 ID 折叠成一行 但是 我不明白为什么它不会折叠少于 2 行 我还尝试通过将列限制为仅包含 NA 以外的值的列来验证我的输出 因为原始数据中有 123 列 有人可
  • 如何根据另一列的条件语句将因子列添加到数据框?

    我有一个数据框 我需要根据条件语句添加一个因子列 这里是data https www dropbox com s hujiacus8ek5o5z MoroccoCGE CC Stats csv Code morstats agri f lt
  • 安装 R 包。包含目录为空。开发标头

    我目前正在尝试运行一些最初在 2 11 0 下运行的 R 代码 我使用的 R 版本 2 14 1 无法运行该代码 我不熟悉 R 及其向后兼容性 据我所知 我的问题可能与版本无关 我会很高兴得知这是我做错的事情 其余的代码是无关紧要的 即使我
  • 计算横截面积作为高度的函数

    我试图弄清楚如何计算不同水位的河流横截面的充满水的面积 对于横截面 我有 5 m 宽河流上每 25 cm 的深度 并且可以根据之前很好回答的问题来计算面积计算不同高度的横截面积 https stackoverflow com questio
  • 将 Excel 数字日期重新格式化为 R 日期

    希望将从 Excel 中提取的列重新格式化为包含数字 Excel 格式 例如 40182 的数据框 as date 40182 origin 1899 12 30 format b Y Returns 1 2070 年 1 月 5 日 我正
  • 在两个向量之间交换元素(交叉)

    假设我有 chromosome 1 lt c 0010000001010000 chromosome 2 lt c 0100000001001010 我该如何实施step 3 5 Evaluate NC1 否 中 1 个chromosome
  • 挑战:优化取消列出[简单]

    因为 SO 最近有点慢 所以我发布了一个简单的问题 如果大鱼们能在这场比赛中留在替补席上并给新秀们一个回应的机会 我将不胜感激 有时我们的对象具有大量的大列表元素 向量 您如何将这个对象 取消列出 到单个向量中 证明你的方法比unlist
  • R闪亮:基于checkboxgroupinput的子集数据

    我想根据复选框输入动态选择的列对数据进行子集 有什么方法可以使我的输入文件在我的代码中全局可用 以便可以方便地进行进一步的操作 以下是我的代码 Server R library shiny shinyServer function inpu
  • ggplot2以限制为中心的多边形世界地图给出了有趣的边缘

    使用下面的代码我生成了一张以华盛顿特区为中心的地图 解决方案基于科斯克的解决方案在这里 https stackoverflow com questions 10620862 use different center than the pri
  • rpy2 无法加载外部库

    希望有人能帮忙解决这个问题 R版本 2 14 1rpy2版本 2 2 5蟒蛇版本 2 7 3 一直在尝试在 python 脚本中使用 rpy2 加载 R venneuler 包 该包以 rJava 作为依赖项 venneuler 和 rJa
  • 二部图匹配以匹配两个集合

    我是新手igraphR 中的包 我有两套A and B 每个都有N顶点 A1 A2 AN and B1 B2 BN 每个元素之间都有一个边缘A对每一个元素B 我有一个函数fWgt Ai Bj 返回之间的边的权重Ai and Bj 我一直在尝
  • 将 r 中的一列从出生日期更改为年龄

    我是第一次使用 data table 我的表中有大约 400 000 个年龄的列 我需要将它们从出生日期转换为年龄 做这个的最好方式是什么 我一直在思考这个问题 到目前为止对这两个答案都不满意 我喜欢用lubridate 就像 KFB 所做

随机推荐

  • OpenShift 中水平 pod 自动缩放器的自定义指标

    我正在使用 openshift v3 它使用 kubernetes 版本 1 2 我正在探索更多有关自动缩放功能的信息 目前它表示仅支持 CPU 指标 有没有一种方法可以根据内存或从 heapster 收集的其他指标数据来扩展 opensh
  • 如何等待ajax请求?

    我正在尝试编写一个 JS 代码 如果给定的数字已存在于数据库中 该代码将取消 btn submit 按钮 onclick 事件 我使用 AJAX 查询数据库中的给定数字 并确定是否应将数据发送到将上传问题的 php 站点 为了确定这一点 我
  • 在 Python 2.7 中复制 Java 的 PBEWithMD5AndDES

    如果这不是很明显 我首先要说的是我不是加密货币人士 我的任务是在 Python 2 7 中复制 Java 的 PBEWithMD5AndDES 具有 DES 加密的 MD5 摘要 的行为 我确实可以访问 Python 的加密工具包 PyCr
  • Python if语句无法识别蓝牙信标

    这是 BeaconScanner py 文件用来查找和列出 ble 信标的 ScanUtility py 文件 This is a working prototype DO NOT USE IT IN LIVE PROJECTS impor
  • IActionDelegate 的 SelectionChanged() 未被调用

    我有一个动作类 我想根据文件扩展名启用它 我把这个逻辑写在selectionChanged 动作类的 但是当我启动 Eclipse 并单击上下文菜单的文件时 不会调用此方法 当我单击任何操作时 单击该文件后都会调用selectionChan
  • 相当于 Unix tail 命令的 Windows [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在寻找相当于 Unix tail 命令的命令 它允许我在写入日志文件时观察日志文件的输出 如果您使用 PowerShell 那么这有效 Get C
  • T-SQL Puzzler - 爬取对象依赖关系

    此代码涉及递归存储过程调用和避免游标名称冲突的 不太好 的方法 最后我不在乎它是否使用游标 只是寻找最优雅的方法 我主要将其用作跟踪存储过程层次结构的简单方法 无需购买产品 我在 动态sql 中尝试了游标 但运气不佳 我想深入大约 10 层
  • iOS Google Plus 集成和共享

    我正在尝试将我的应用程序中的内容分享到 Google Plus 为此 我使用了以下代码 IBAction handleGPlus id
  • docker rmi 无法删除镜像,并且:没有这样的 id

    我有很多图像 当我尝试删除它们时docker rmi sudo docker rmi acd33a9490dc Error response from daemon No such id 75ce1f6710bab109a7d7cbee05
  • C++ 对非 const 对象的 const 引用和对非 const 对象的非 const 引用之间的区别

    如果引用的对象不是 const 对象 则引用的 const 关键字的用途是什么 r1 和 r2 的作用 如下 有什么区别吗 int i 42 non const object const int r1 i const reference t
  • 从 UNION 创建临时表时遇到问题

    我有一个 UNION 语句 它本身执行得很好 SELECT 1999999999 AS MobileNo Test AS FirstName Last AS LastName 268 AS TemplateID AS MISC1 AS MI
  • 获取 UILabel 中的行数

    针对同一问题的许多旧解决方案已被弃用 UILineWordWrap 仅举一个已弃用的解决方案 我还发现其中一些不可靠 那么 在IOS 8中 我应该如何找到uilabel中的行数呢 As of iOS8 您可以使用 NSString boun
  • 我可以在 Linux 中进行写时复制 memcpy 吗?

    我有一些代码 我经常复制一大块内存 通常是在对其进行很小的更改之后 我已经实现了一个跟踪更改的系统 但我认为如果可能的话 告诉操作系统对内存进行 写时复制 并让它只处理这些部分的副本 这可能会很好哪个改变 然而 虽然 Linux 确实进行了
  • 从 html 创建 nsattributedstring 时,ios7 字体大小发生变化

    我有一个 UITextView 我在其中管理一个 NSAttributedString 最初通过键盘正常输入 我将属性字符串保存为 HTML 看起来不错 当我再次加载它并将其从 HTML 转换回属性字符串时 字体大小似乎发生了变化 例如 加
  • Jquery Flot 缓慢并冻结 IE

    我目前必须在 8000 32000 点 4 行 8000 点 附近进行绘图 我通过 JSON 请求获取数据 效果非常好 实际上数据会在不到一秒的时间内返回给我 然而 每当我到达 plot 点时 它就会冻结 IE8 并且需要永远加载那么多点
  • 如何让 Vim 在 Cygwin 上显示正确的颜色?

    我在 Cygwin 上使用 Vim 我正在尝试使用沙漠配色方案 在 gVim 中它看起来像这样 https i stack imgur com FNaVa png https i stack imgur com FNaVa png 但在我的
  • java中非法的远程方法

    这是我第一次使用java Rmi 我有一个扩展的自定义类UnicastRemoteObject并实现一个扩展远程的接口 我认为我已经在类中正确实现了接口的方法 但我仍然得到一个IllegalArgumentException当我尝试运行我的
  • 我的模式与 ISO 样式日期不匹配,为什么? [复制]

    这个问题在这里已经有答案了 function validateDate date echo date 2012 08 24 20 30 00 if preg match 0 9 4 0 9 2 0 9 2 1 2 1 0 9 1 0 5 1
  • Node.js - 在 HTTP GET 请求查询中发送时,数组将转换为对象

    以下 Node js 代码 var request require request var getLibs function var options packages example1 example2 example3 os linux
  • 用于循环列表的自定义函数

    我有一个有效的自定义函数 但不确定如何让它与输入列表循环 看起来我需要了解 apply 等 但我对当前的设置还不太了解 该函数使用 rollapply 查找给定时间范围内的最大指标 library zoo library dplyr Dat