R:连续系列中的滞后

R:连续系列中的滞后,r,series,sequential,R,Series,Sequential,我需要一些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

我需要一些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

有人能给我指一下正确的方向吗

提前谢谢

更新:正在尝试执行以下操作:

gaps <- data %>% 
  mutate(lead_start = lead(Open) - 1) %>% 
  filter(Close != lead_start) %>% 
  transmute(Open = Close + 1, Close = lead_start)
实际上我只需要这样做:

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())
数据%
添加行(Open=lastOpen,Close=Sys.time())

感谢mkeskisa

我不确定我是否完全理解您想要实现的目标,但我认为这将帮助您弥补缺失的差距。你说你想要缺少的空白,但是你提供的列表会与你之前的空白重叠。例如,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
库(tidyverse)
df%
过滤器(停止!=导程启动)%>%
转换(启动=停止+1,停止=导程\启动)
缺口
#一个tibble:3x2
起止点
1 10052 10059
2 10080 10099
3 10120 10159

您期望的结果中没有规则的模式/逻辑。为什么期望第一个或第二个数据集作为答案?谢谢Mkeskisa!我有个问题。我收到以下消息:“mutate_impl(.data,dots)中出错:求值错误:找不到对象‘Open’。”我使用:name(data)更改了列表在应用函数之前,我的数据是这样的:Browse[2]>data~Open~Close 11.511346e+12 1.511346e+12 2 1.511346e+12 1.511346e+12 3 1.511346e+12 1.511346e+12 4 1.511346e+12 1.511346e+12…在我的解决方案中,我使用提供的数据将数据转换为具有两列的TIBLE。您是否尝试过将原始数据转换为data.frame格式,该列由上述两列组成?抱歉,我不知道如何进行转换。我的原始“数据”已经是一个数据帧。我不知道如何制作一个Tibble。非常感谢@mkeskisa!!!成功了。我更新了帖子以显示结果。我发现了%>%,lead,lag,mutate和transmute,顺便说一句,非常感谢你!
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())
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