R : 连续系列滞后
R : Lags in sequential serie
我在 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 !!!!!
我不确定我是否完全理解您想要实现的目标,但我认为这将帮助您弥补缺失的差距。您说您想要缺失的空白,但您提供的列表会与您之前的空白重叠。例如。 10040 到 10060 与 10060 10079 到 10060 重叠。通常,您可能可以使用滞后 and/or 领先实现您想要做的事情。
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
我在 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 !!!!!
我不确定我是否完全理解您想要实现的目标,但我认为这将帮助您弥补缺失的差距。您说您想要缺失的空白,但您提供的列表会与您之前的空白重叠。例如。 10040 到 10060 与 10060 10079 到 10060 重叠。通常,您可能可以使用滞后 and/or 领先实现您想要做的事情。
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