【问题标题】:R : Lags in sequential serieR:顺序系列中的滞后
【发布时间】:2018-08-25 07:07:40
【问题描述】:

我在 R 中需要一些帮助:我正在尝试识别两个变量的连续序列中的差距。 目前,我有一个看起来像这样的列表。

data <- fetch(rs, n=-1)
names(data) <- c("~Open", "~Close")

Browse[2]> typeof(data)
[1] "list"

~Open    ~Close
10000     10019
10020     10039
10040     10051  -> Gap from 10052->10060 : I need 10040-10060
10060     10079
10100     10119  -> Gap from 10080->10099 : I need 10060-10099 or 10080-10099
10160     10179  -> Gap from 10120->10159 : I need 10120-10159 or 10100-10159

我的结果应该看起来像一个缺少记录的列表(开始、停止)。 例如:

Open        Close
10040       10060
10080       10099
10100       10159

Open        Close
10040       10099
10120       10159

有人可以指点我正确的方向吗?

提前致谢。

更新:尝试做:

gaps <- data %>% 
  mutate(lead_start = lead(Open) - 1) %>% 
  filter(Close != lead_start) %>% 
  transmute(Open = Close + 1, Close = lead_start)

我收到以下错误消息:

Error in mutate_impl(.data, dots) : 
  Evaluation error: object 'Open' not found.

我实际上只需要这样做:

data <- fetch(rs, n=-1)
lastOpen <- data[dim(data)[1], 2]
lastOpen <- lastOpen - lastOpen %% 20;
gaps <- as_tibble(data) %>% 
  mutate(lead_start = lead(Open) - 1) %>%
  filter(Close != lead_start) %>% 
  transmute(Open = (Close + 1) - ((Close + 1) %% 20), Close = lead_start) %>%
  add_row(Open = lastOpen, Close = Sys.time())

感谢 mkeskisa !!!!!

【问题讨论】:

  • 您期望的结果中没有规则的模式/逻辑。为什么您期望第一个或第二个数据集作为答案?

标签: r series sequential


【解决方案1】:

我不确定我是否完全理解您想要实现的目标,但我认为这将帮助您弥补缺失的空白。您说您想要缺少的空白,但您提供的列表将与您之前的空白重叠。例如。 10040 到 10060 与 10060 10079 到 10060 重叠。通常,您可能可以使用滞后和/或超前实现您想要做的事情。

library(tidyverse)
df <- tibble::tribble(
  ~Start,  ~Stop,
  10000L, 10019L,
  10020L, 10039L,
  10040L, 10051L,
  10060L, 10079L,
  10100L, 10119L,
  10160L, 10179L
  )

gaps <- df %>% 
  mutate(lead_start = lead(Start) - 1) %>% 
  filter(Stop != lead_start) %>% 
  transmute(start = Stop + 1, stop = lead_start)

gaps
# A tibble: 3 x 2
  start  stop
  <dbl> <dbl>
1 10052 10059
2 10080 10099
3 10120 10159

【讨论】:

  • 谢谢 Mkeskisa !我有一个问题。我收到以下消息:“mutate_impl(.data,dots)中的错误:评估错误:找不到对象'打开'。”我使用以下方法更改了我的列表:names(data)
  • 在我应用函数之前,我的数据如下所示: Browse[2]> data ~Open ~Close 1 1.511346e+12 1.511346e+12 2 1.511346e+12 1.511346e+12 3 1.511346 e+12 1.511346e+12 4 1.511346e+12 1.511346e+12 ....
  • 在我的解决方案中,我将数据转换为包含提供数据的两列的小标题。您是否尝试过将原始数据转换为 data.frame 格式,该列由上述两列组成?
  • 抱歉,我不知道该怎么做。我原来的“数据”已经是一个数据框。而且我不知道如何用它制作一个小标题。
  • 非常感谢@mkeskisa !!!有效。我更新了帖子以显示结果。我发现了函数 %>%、领先、滞后、变异和转换顺便说一句,非常感谢你!
猜你喜欢
  • 2017-12-08
  • 1970-01-01
  • 2022-06-15
  • 2016-07-02
  • 2013-05-13
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
相关资源
最近更新 更多