RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 570098
Accepted
mr.T
mr.T
Asked:2020-09-25 16:11:25 +0000 UTC2020-09-25 16:11:25 +0000 UTC 2020-09-25 16:11:25 +0000 UTC

及时同步三个数据帧

  • 772

三个数据帧的长度略有不同,因为观察是在不同的时间进行的,

它们如何及时同步以仅保留所有三个帧中的那些观察结果并丢弃仅在不同帧中出现的那些观察结果

这是日期框架本身

> head(sec1)
        date  time   open   high    low  close vol
1 2016.09.06 08:45 3081.5 3082.5 3080.5 3080.5   6
2 2016.09.06 08:50 3081.5 3081.5 3079.5 3080.5   6
3 2016.09.06 08:55 3081.5 3082.5 3081.5 3082.5  19
4 2016.09.06 09:00 3083.5 3083.5 3081.5 3082.5  19
5 2016.09.06 09:05 3083.5 3085.5 3082.5 3085.5   8
6 2016.09.06 09:10 3086.5 3086.5 3084.5 3086.5  15
> head(sec2)
        date  time  open  high   low close vol
1 2016.09.13 13:00 95.34 95.40 95.33 95.39  36
2 2016.09.13 13:05 95.40 95.43 95.39 95.41  40
3 2016.09.13 13:10 95.42 95.44 95.40 95.42  37
4 2016.09.13 13:15 95.41 95.42 95.39 95.39  25
5 2016.09.13 13:20 95.40 95.41 95.38 95.38  21
6 2016.09.13 13:25 95.39 95.42 95.38 95.42  32
> head(sec3)
        date  time    open    high     low   close vol
1 2016.09.14 18:10 1.12433 1.12456 1.12431 1.12450 137
2 2016.09.14 18:15 1.12444 1.12459 1.12424 1.12455 139
3 2016.09.14 18:20 1.12454 1.12477 1.12446 1.12469 148
4 2016.09.14 18:25 1.12468 1.12474 1.12442 1.12453 120
5 2016.09.14 18:30 1.12452 1.12483 1.12442 1.12482 156
6 2016.09.14 18:35 1.12481 1.12499 1.12472 1.12474 126

输出应该是三个相同长度(nrow)的数据帧,所有数据帧的行应该有相同的日期和时间

r
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. ikashnitsky
    2020-11-18T21:18:20Z2020-11-18T21:18:20Z

    据我了解,任务是在每个数据集中只留下那些在其他两个数据集中存在具有相似值的观测值的观测date值time。


    我认为最简单的解决方案是:

    • 将所有三个数据集合并在一起
    • 按变量分组观察date和time
    • 计算组中的观察次数
    • 只保留那些出现 3 次date的组合time
    • 通过相交观察的数据集过滤源数据集

    代码(没有检查 - 懒得生成初始数据集;如果你在某处遗漏了一些东西并且它不起作用,请写下)

    library(tidyverse)
    
    df_cross <- bind_rows(df1, df2, df3) %>%
            group_by(date,time) %>%
            summarise(occurance = n()) %>%
            ungroup() %>%
            filter(occurance == 3) %>%
            select(-occurance)
    
    df1_refined <- left_join(df_cross, df1, by = c('date', 'time'))
    

    UPD 一切变得更加容易

    df_cross <- intersect(df1 %>% select(date,time), 
                      df2 %>% select(date,time), 
                      df3 %>% select(date,time))
    
    df1_refined <- left_join(df_cross, df1, by = c('date', 'time'))
    
    • 4
  2. Best Answer
    Artem Klevtsov
    2020-09-25T19:06:43Z2020-09-25T19:06:43Z

    如果我对问题的理解正确,那么你需要确定日期和时间的相交区间,并过滤掉落入这些区间的观测值。我注意到作为示例给出的数据按日期不重叠。

    定义日期边界:

    min_date <- list(df1, df2, df3) %>% 
        sapply(. %>% .subset2("date") %>% as.Date(format = "%Y.%m.%d") %>% min()) %>% 
        max()
    max_date <- list(df1, df2, df3) %>% 
        sapply(. %>% .subset2("date") %>% as.Date(format = "%Y.%m.%d") %>% max()) %>% 
        min()
    

    现在时间相同:

    min_time <- list(df1, df2, df3) %>% 
        sapply(. %>% .subset2("time") %>% as.POSIXct(format = "%H:%M") %>% min()) %>% 
        max()
    max_time <- list(df1, df2, df3) %>% 
        sapply(. %>% .subset2("time") %>% as.POSIXct(format = "%H:%M") %>% min()) %>% 
        min()
    

    现在您可以过滤观察结果:

    df1 <- df1 %>% 
        mutate(date = as.Date(date, format = "%Y.%m.%d")) %>% 
        filter(date >= min_date & date <= max_date) %>%
        mutate(time = as.POSIXct(time, format = "%H:%M")) %>% 
        filter(time >= min_time & time <= max_time)
    

    要使代码正常工作,您需要下载dplyr.

    • 2

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5