【发布时间】:2019-11-28 08:25:13
【问题描述】:
在我的示例中,我有一个包含 3 列的数据框:日期、信号和值。现在我想改变一个以信号为条件的新列。
如果前一天有信号 (ifelse(lag(signal) == 1),那么给我接下来的两天 (else = NA)。但在这种情况下,我有三个不同的信号(1,2,3)。
使用此代码,我只能获得信号 1 的第二天。但我也想获得第二天的信号。而且我想计算不同信号的多列(可能与信号交叉的后续天数)。
df %>% mutate(calculation = ifelse(lag(signal) == 1,
value,
NA))
这是我的示例数据:
library(tidyverse)
library(lubridate)
set.seed(123)
df <- tibble(date = today()+0:10,
signal = c(0,1,0,0,2,0,0,3,0,0,0),
value = sample.int(n=11))
# A tibble: 11 x 3
date signal value
<date> <dbl> <int>
1 2019-07-23 0 3
2 2019-07-24 1 11
3 2019-07-25 0 2
4 2019-07-26 0 6
5 2019-07-27 2 10
6 2019-07-28 0 5
7 2019-07-29 0 4
8 2019-07-30 3 9
9 2019-07-31 0 8
10 2019-08-01 0 1
11 2019-08-02 0 7
这是我想要的输出:
# A tibble: 11 x 3
date signal value new_col_day1_sig_1 new_col_day2_sig_1 new_col_day1_sig_2
<date> <dbl> <int>
1 2019-07-23 0 3 NA NA NA
2 2019-07-24 1 11 NA NA NA
3 2019-07-25 0 2 2 2 NA
4 2019-07-26 0 6 NA 6 NA
5 2019-07-27 2 10 NA NA NA
6 2019-07-28 0 5 NA NA 5
7 2019-07-29 0 4 NA NA NA
8 2019-07-30 3 9 NA NA NA
9 2019-07-31 0 8 NA NA NA
10 2019-08-01 0 1 NA NA NA
11 2019-08-02 0 7 NA NA NA
....and so on...(the next colmns should be new_col_day2_sig_2, new_col_day1_sig_3, new_col_day2_sig_3)
我想要一个动态的解决方案,因为我想要的不仅仅是接下来的两天,而是最多连续 7 天。并且解决方案应该考虑不同的信号(1,2,3)。
而且该解决方案也应该适用于重叠事件。
你能帮我解决我的问题吗?
【问题讨论】:
-
现在还不清楚(至少对我来说)你想用新信号做什么。为什么在您想要的输出中只有一个值列?你有多少个信号列?您是否尝试使我的解决方案适应我的问题?您是否考虑过问另一个问题。
-
好吧,这有点令人困惑。我将在一个新问题中描述这个问题。
标签: r dplyr time-series