R dplyr:基于行的条件拆分/应用/组合

2023-12-08

这是 dplyr 版本这个问题

我有以下内容data.table

initial.date <- as.POSIXct('2018-10-27 10:00:00',tz='GMT')
last.date <- as.POSIXct('2018-10-28 17:00:00',tz='GMT') 
    PriorityDateTime=seq.POSIXt(from=initial.date,to = last.date,by = '30 sec')
    TradePrice=seq(from=1, to=length(PriorityDateTime),by = 1)
    ndf<- data.frame(PriorityDateTime,TradePrice)
    ndf$InstrumentSymbol <- rep_len(x = c('asset1','asset2'),length.out = length(ndf$PriorityDateTime))
    ndf$id <- seq(1:length(x = ndf$InstrumentSymbol))
    ndf$datetime <- ymd_hms(ndf$PriorityDateTime)
    res <- ndf %>% data.table()

看起来像这样:

    > res
         PriorityDateTime TradePrice InstrumentSymbol   id            datetime
   1: 2018-10-27 10:00:00          1           asset1    1 2018-10-27 10:00:00
   2: 2018-10-27 10:00:30          2           asset2    2 2018-10-27 10:00:30
   3: 2018-10-27 10:01:00          3           asset1    3 2018-10-27 10:01:00
   4: 2018-10-27 10:01:30          4           asset2    4 2018-10-27 10:01:30
   5: 2018-10-27 10:02:00          5           asset1    5 2018-10-27 10:02:00

Using dplyr最优雅、最快速的方法是什么:

  1. Split: 对于每行定义其他具有datetime过去或未来最多 60 秒(时间差小于 60 秒),并且具有相同的InstrumentSymbol正如这条线的。
  2. 应用:在这些接近的线中,哪一条最接近TradePrice到这条线的TradePrice[i]: 得到index在原来的data.frameTradePrice另一行的
  3. 合并:将结果作为新列重新组合到原始列中data.table例如作为新列index.minpricewithin60 and minpricewithin60

结果示例:

> res
         PriorityDateTime TradePrice InstrumentSymbol   id            datetime minpricewithin60 index.minpricewithin60
   1: 2018-10-27 10:00:00          1           asset1    1 2018-10-27 10:00:00                2                      2
   2: 2018-10-27 10:00:30          2           asset2    2 2018-10-27 10:00:30                4                      4
   3: 2018-10-27 10:01:00          3           asset1    3 2018-10-27 10:01:00                1                      1
   4: 2018-10-27 10:01:30          4           asset2    4 2018-10-27 10:01:30                2                      2
   5: 2018-10-27 10:02:00          5           asset1    5 2018-10-27 10:02:00                3                      3

我想我的问题可以问为“如何修复行dplyr以类似的方式apply(df,1, function(x) df$column-x["column"])我有潜在的解决方案dplyr但到目前为止一切都相当缓慢。


解决方案使用dplyr包装和lapply功能:

result_df <- do.call(rbind, lapply(1:nrow(res), function(row_id) {

             temp <-   res %>% filter(InstrumentSymbol == res$InstrumentSymbol[row_id]) %>% 
                       mutate(time_diff = abs(difftime(res$datetime[row_id], datetime, units = "secs")),
                              diff_price = abs(TradePrice - res$TradePrice[row_id])) %>% 
                       filter(id != res$id[row_id], time_diff <= 60) %>% 
                       filter(diff_price == min(diff_price)) %>% select(TradePrice, id) %>% 
                       rename(minpricewithin60 = TradePrice, index.minpricewithin60 = id)

             if(nrow(temp) == 0) temp[1,] <- c(NA, NA)

             return(bind_cols(res %>% slice(rep(row_id, nrow(temp))), temp))
                                                                  }))

head(result_df)

     PriorityDateTime TradePrice InstrumentSymbol id            datetime minpricewithin60 index.minpricewithin60
1 2018-10-27 10:00:00          1           asset1  1 2018-10-27 10:00:00                3                      3
2 2018-10-27 10:00:30          2           asset2  2 2018-10-27 10:00:30                4                      4
3 2018-10-27 10:01:00          3           asset1  3 2018-10-27 10:01:00                1                      1
4 2018-10-27 10:01:00          3           asset1  3 2018-10-27 10:01:00                5                      5
5 2018-10-27 10:01:30          4           asset2  4 2018-10-27 10:01:30                2                      2
6 2018-10-27 10:01:30          4           asset2  4 2018-10-27 10:01:30                6                      6
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R dplyr:基于行的条件拆分/应用/组合 的相关文章

  • 将 stat_smooth 添加到 ggplot2 中的仅 1 个方面

    我有一些数据 在某个因素的某个水平上 存在显着的相关性 在另一个层面上 则没有 并排绘制这些图很简单 使用 stat smooth 向它们添加一行 也很简单 但是 我不希望线条或其填充显示在两个面之一中 有没有一种简单的方法可以做到这一点
  • 如果 RCurl::getURL() 执行时间太长,如何停止执行?

    有没有办法告诉 R 或 RCurl 包在超过指定时间段时放弃尝试下载网页并转到下一行代码 例如 gt library RCurl gt u http photos prnewswire com prnh 20110713 NY34814 b
  • OpenStreetMap 不显示在 RStudio 中(使用 R 3.2.1)

    我正在使用来自的代码here https rstudio github io leaflet library leaflet m lt leaflet gt addTiles gt addMarkers lng 174 768 lat 36
  • 正则表达式在 R 中同时多次包含字母/特殊字符时删除单词

    我想删除那些单词中字母 特殊字符的数量同时出现两次以上的单词 例如 输入就像 Google in theee lland of whhhat c c and e 输出应该是 Google in lland of c c and x lt G
  • R闪亮:基于checkboxgroupinput的子集数据

    我想根据复选框输入动态选择的列对数据进行子集 有什么方法可以使我的输入文件在我的代码中全局可用 以便可以方便地进行进一步的操作 以下是我的代码 Server R library shiny shinyServer function inpu
  • 使用 xtable 对乳胶输出的表进行排序

    我正在尝试生成一个排序表并导出到乳胶中 然而 xtable 似乎无法处理排序表 建议 a lt sample letters 500 replace T b lt table a c lt sort table a decreasing T
  • ggplot2 中的颜色和填充参数有什么区别?

    ggmap location geom density 2d aes long lat df geom point aes long lat color special alpha 0 5 data df 当我更改填充颜色时 我看不出有什么
  • do.call 的 envir 选项如何工作?

    的文档do call states If quote is FALSE 默认值 然后对参数进行求值 在调用环境中 而不是在envir 这句话向我暗示 当quote FALSE 指定envir没有什么区别 然而 事实并非如此 事实上我遇到过需
  • 当我添加形状时,分组哑铃图变得不稳定

    我有以下数据显示白人与黑人在各个领域的一致性百分比 我想创建一个分组哑铃图 其中国家值和州值彼此相邻 以便于比较 Domain c A B C D E F G A B C D E F G A B C D E F G A B C D E F
  • 将 r 中的一列从出生日期更改为年龄

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

    这个问题在这里已经有答案了 自从新的 dplyr v1 0 0 更新发布以来 我注意到该功能group indices 有 已弃用 我在工作中经常使用这个功能 并且我喜欢在mutate 例如使用dplyr v0 8 3我能够非常轻松地做这样
  • 使用插入符号完全可重现的并行模型

    当我在插入符中运行 2 个随机森林时 如果设置随机种子 我会得到完全相同的结果 library caret library doParallel set seed 42 myControl lt trainControl method cv
  • 计算数据集列的百分位数

    最亲爱的 R 专家 为您快速介绍一下 我正在做一项作业 在这个练习中 我被要求从数据中获取基本统计数据infert数据集 它是内置的 特别是其中的一列 infert age 对于不熟悉数据集的人 gt table ages Which is
  • 使用 R 进行语言相关排序

    1 如何正确排序 任务是根据英文字母对美国州名缩写进行排序 但我注意到 R 根据某种操作系统语言或区域设置对列表进行排序 例如 在我的语言 立陶宛语 中 甚至拉丁语 非立陶宛语 字母的顺序也与英语字母表中的顺序不同 仅比较两个字母表中的非立
  • 可以使用部分名称访问列表成员吗?这是一个功能吗?

    考虑这个 R 代码 gt l list key 1 gt l k 1 1 gt l ke 1 1 gt l k NULL gt names l 1 key 这是否意味着您可以使用以下方式访问列表成员 及其部分名称 当我在一次令人沮丧的错误搜
  • 如何在 R 中压缩多个 CSV 文件?

    我正在尝试在 R 中压缩多个 CSV 文件 下面是供参考的代码 Create two dataframes using inbuilt datasets for reproducible code df1 lt head mtcars df
  • 如何将曲线拟合到直方图

    我已经探讨了有关该主题的类似问题 但在我的直方图上生成漂亮的曲线时遇到了一些麻烦 我知道有些人可能会认为这是重复的 但我目前还没有找到任何可以帮助解决我的问题的东西 尽管数据在此处不可见 但这里是我使用的一些变量 以便您可以在下面的代码中看
  • x[floor(d)] + x[ceiling(d)] 中的错误:二元运算符的非数字参数

    我试图绘制病毒载量和试验组的简单箱线图 但不断收到此错误 x floor d x ceiling d 中的错误 二元运算符的非数字参数 dataset PatientID trial arm viral load 1 club 19 2 c
  • R 中的整数或双精度列表

    我有一个大约 1000 个整数的列表 我需要能够进行一些数学计算 但它们被困在列表或字符形式中 我怎样才能切换它们以便它们可用 样本数据 gt y 1 1 7 3 1 6 7 1 7 6 5 3 1 3 3 0 6 2 4 9 19 1 9
  • 将数据帧单列中的值向上移动

    使用这样的示例数据 example data frame x c 1 2 3 4 5 6 7 8 y c 1 2 3 4 5 6 7 8 z c 1 2 3 4 5 6 7 8 看起来像这样 x y z 1 1 1 1 2 2 2 2 3

随机推荐

  • jar 中的类路径资源

    我有一个项目A 其中包含一些java文件和一个类路径资源R txt 在项目中我使用 ClassLoader getSystemResource R txt 检索 R txt 然后我有一个项目 B 其中包含项目 A 的 jar 文件 现在 g
  • 多个线程可以同时向并发集合添加项目吗?

    我正在尝试找出 C 中的并发集合 ConcurrentBag ConcurrentDictionary 和 ConcurrentQueue 多个线程是否可以向其中添加项目EXACTLY同时 还是他们一前一后地等待 我试图检查他们的源代码 但
  • DialogFragment 中的 ActionBar

    在我的 Galaxy Tab 10 1 上的日历应用程序中 创建新事件时 标题栏 操作栏区域中会出现一个对话框 其中包含 完成 和 取消 按钮 我想在我的应用程序中实现这一点 我尝试过使用setHasOptionsMenu true 除了覆
  • Android 无尽适配器

    我正在使用无尽适配器http github com commonsguy cwac endless但是每当我返回 false 因为我没有更多的数据要附加 如此处所述http github com commonsguy cwac endles
  • 插入由触发器生成但未传递的 ID 字段

    在 MySQL 中 我有一个触发器 BEGIN IF EXISTS SELECT FROM devices WHERE device id NEW device id THEN SET NEW id NULL ELSE INSERT INT
  • 如何在 R 中对条形图的订单数据进行“分组”?

    我正在研究生物信息学 我需要输出一个包含祖先结果的图表 条形图 通常 这些图表是通过将人群分组在一起来绘制的 完成的方法是 您只需绘制不同假定人群 此处为 4 的 Q 分数 下面的数据 的条形图 问题是我使用ord tbl order tb
  • 如何在 AppleScriptObjC 中使用 NSAutoreleasePool

    我想知道如何从后台函数停止另一个函数 另外 我必须排空 NSAutoreleasePool 但我不知道该怎么做 我认为如果我不释放池 这个应用程序有时会冻结 property i 0 property myLabel missing val
  • Nginx 和 PHP-cgi - 无法 file_get_contents 服务器上的任何网站

    我认为最好用代码来解释这一点 从网络目录 vi get php 将此 php 添加到 get php IPOFTHESERVER 是运行 nginx 和 PHP 的服务器的 IP php get php 返回该 IP 托管的 默认 网站的内
  • Mifare认证

    假设我想对 Mifare Classic 进行身份验证 我如何知道要发送到卡的 APDU 的确切类型 Example 这段代码 bcla 0xFF bins 0x86 bp1 0x0 bp2 0x0 currentBlock len 0x5
  • 使用 RouteExistingFiles 阻止对现有文件的访问,即使不存在路由

    在 ASP net MVC 2 中 我可以使用routes RouteExistingFiles true 通过路由系统发送所有请求 即使它们存在于文件系统上 通常 这最终会击中 controller action id 路由并抛出异常 因
  • TabActivity 与嵌入 Activity 之间的通信

    我试图找出 TabActivity 和此 TabActivity 中嵌入的子活动之间通信的最佳实践 在我的 TabActivity 中 有一个按钮 单击按钮时 我希望更新此 TabActivity 中嵌入的子活动 我编写了如下代码 只是想知
  • Thymeleaf 和 #fields.hasErrors

    我正在为学校做这项作业 使用 SpringMVC Hibernate JPA 和 Thymeleaf 下面的代码涉及一个名为 stringGrade 的特定属性 我想使用 Hibernate Validator 验证该字段中的输入 我似乎无
  • 选择查询中的 JDBCPreparedStatement 和参数(?)[重复]

    这个问题在这里已经有答案了 我与oracle数据库的连接如下 String selectSQL SELECT supplier name FROM supplier WHERE supplier id PreparedStatement p
  • ProgressBar 在阻塞的 UI 线程中更新

    为什么ProgressBar会在理论上阻塞的UI线程中更新 在简单的应用程序中 我有一个进度栏和一个标签 我在 UI 线程中运行一个耗时的方法 尝试更新 ProgressBar 和标签 这是not应该可以工作 因为 UI 线程被阻塞 但进度
  • 更改 awt 中的按钮背景颜色

    所以我有一个名为 Safe25 的 GUI 程序 基本上 如果您按正确的顺序按下按钮 即 15032018 程序将自行关闭 如果您输入正确的数字 假设您在开始时按 1 按钮应将其背景颜色更改为绿色 例如this 如果按错按钮 按钮的颜色应更
  • 如何更改使用 ggplot2 绘制的图的背景颜色

    默认情况下 ggplot2 生成带有灰色背景的图 如何更改绘图背景的颜色 例如 由以下代码生成的图 library ggplot2 myplot lt ggplot data data frame a c 1 2 3 b c 2 3 4 a
  • Apache HttpClient 4.0.3 - 如何为 POST 请求设置带有 sessionID 的 cookie?

    你能告诉我如何将 jsessionid 存储在 cookie 中 以便可以通过 post 请求将其传递到 servlet 吗 我正在使用 Apache HttpClient 版本 4 0 3 我找到的所有解决方案都解释了如何使用 HttpC
  • 检查不为空不与 localStorage 一起使用[重复]

    这个问题在这里已经有答案了 var test null if test null console log should not be logged in the console it worked localStorage setItem
  • Web 请求错误 407 需要代理身份验证

    尝试从网站获取响应 using System Text using System Net using System IO namespace DutyPharmacy751013 class Program static void Main
  • R dplyr:基于行的条件拆分/应用/组合

    这是 dplyr 版本这个问题 我有以下内容data table initial date lt as POSIXct 2018 10 27 10 00 00 tz GMT last date lt as POSIXct 2018 10 2